一、基础篇--1.1Java基础-面向对象的特征

面试题汇总一 Java 语言基础篇 前言 题目汇总来源史上最全各类面试题汇总,没有之一,不接受反驳 春招的进度有些太快了,不知道现在开始学还来不来得及。跟着上面那篇公众号文章里的问题学的,顺便做个记录。 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题汇总五 Spring 篇 面试题汇总六 数据库篇 面试题汇总七 计算机网... 阅读详情

一、基础篇--1.1Java基础-面向对象的特征

  • 面向对象的特征

  封装、继承和多态

  https://blog.youkuaiyun.com/jianyuerensheng/article/details/51602015

  封装:

    定义:封装就是将数据或函数等集合在一个个的单元中(我们称之为类)。被封装的对象通常被称为抽象数据类型。

    优点:1、保护数据成员,不让类以外的程序直接访问或修改,只能通过提供的公共的接口访问==>数据封装。

       2、方法的细节对用户是隐藏的,只要接口不变,内容的修改不会影响到外部的调用者==>方法封装。

       3、良好的封装可以降低程序的耦合度。

    类成员的修饰符

访问修饰符同一个类同包不同包,子类不同包,非子类
private√   
default√√  
protect√√√ 
public√√√√

  继承:
    定义:继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。继承所描述的是“is-a”的关系。

    特点:

     1、子类拥有父类非private的属性和方法

     2、子类可以添加自己的方法和属性,对父类进行扩展

     3、子类可以重新定义父类的方法

    缺点:

     1、父类变动,子类就会跟着变动

     2、继承破坏了封装,父类对子类机会是透明的

     3、继承是强耦合

    《Think in java》中提到:问一问自己是否需要从子类向父类进行向上转型。如果必须向上转型,则继承是必要的,但是如果不需要,则应当好好考虑自己是否需要继承。

    构造函数:

     1、子类无法继承父类的构造函数

        2、创建子类时候,编译器会自动调用父类的无参构造函数

     3、如果父类没有无参构造函数,需要在子类的构造函数中第一行用super调用父类的构造函数

  多态:

    定义:所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定。

因为是在程序运行期间才能确定,所以不用修改代码就可以让程序选择多个运行状态,这就是多态。

    多态的实现条件:继承、重写、向上转型

      对于Java而言,它多态的实现机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。

      例如:     

public class People {
    public void say(){
        System.out.println("我是人");
    }
}
public class Male extends People {
    @Override
    public void say() {
        System.out.println("我是男人");
    }

    public static void main(String[] args) {
        People people = new Male();
        peopleSay(people);

    }
    private static void peopleSay(People people){
        people.say();
    }
}

      peopleSay(People people) 调用的不是引用变量类型people方法里的say,调用的是引用对象类型的即male的say方法。

    实现的形式:在java里实现多态的方式,继承和接口。

      继承:对于引用子类的父类类型,在处理该引用时,它适用于继承该父类的所有子类,子类对象的不同,对方法的实现也就不同,执行相同动作产生的行为也就不同。

         如果父类是抽象类,那么子类必须要实现父类中所有的抽象方法,这样该父类所有的子类一定存在统一的对外接口,但其内部的具体实现可以各异。这样我们就可以使用顶层类提供的统一接口来处理该层次的方法。

      接口:指向接口的引用必须是指定这实现了该接口的一个类的实例程序,在运行时,根据对象引用的实际类型来执行对应的方法。

         继承都是单继承,只能为一组相关的类提供一致的服务接口。但是接口可以是多继承多实现,它能够利用一组相关或者不相关的接口进行组合与扩充,能够对外提供一致的服务接口。所以它相对于继承来说有更好的灵活性。

      经典实例分析:    

public class A {  
    public String show(D obj) {  
        return ("A and D");  
    }  
  
    public String show(A obj) {  
        return ("A and A");  
    }   
  
}  
  
public class B extends A{  
    public String show(B obj){  
        return ("B and B");  
    }  
      
    public String show(A obj){  
        return ("B and A");  
    }   
}  
  
public class C extends B{  
  
}  
  
public class D extends B{  
  
}  
  
public class Test {  
    public static void main(String[] args) {  
        A a1 = new A();  
        A a2 = new B();  
        B b = new B();  
        C c = new C();  
        D d = new D();  
          
        System.out.println("1--" + a1.show(b));  
        System.out.println("2--" + a1.show(c));  
        System.out.println("3--" + a1.show(d));  
        System.out.println("4--" + a2.show(b));  
        System.out.println("5--" + a2.show(c));  
        System.out.println("6--" + a2.show(d));  
        System.out.println("7--" + b.show(b));  
        System.out.println("8--" + b.show(c));  
        System.out.println("9--" + b.show(d));        
    }  
}  

     结果:

       

    分析:  

      ①②③比较好理解,一般不会出错。④⑤就有点糊涂了,为什么输出的不是"B and B”呢?

         当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。(但是如果强制把超类转换成子类的话,就可以调用子类中新添加而超类没有的方法了。)

      在继承链中对象方法的调用存在一个优先级:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)。

        分析4:

          a2.show(b),a2是一个引用变量,类型为A,则this为a2,b是B的一个实例,于是它到类A里面找show(B obj)方法,没有找到,于是到A的super(超类)找,而A没有超类,因此转到第三优先级this.show((super)O),this仍然是a2,这里O为B,(super)O即(super)B即A,因此它到类A里面找show(A obj)的方法,类A有这个方法,但是由于a2引用的是类B的一个对象,B覆盖了A的show(A obj)方法,因此最终锁定到类B的show(A obj),输出为"B and A”。

      分析5:

          a2.show(c),a2是A类型的引用变量,所以this就代表了A,a2.show(c),它在A类中找发现没有找到,于是到A的超类中找(super),由于A没有超类(Object除外),所以跳到第三级,也就是this.show((super)O),C的超类有B、A,所以(super)O为B、A,this同样是A,这里在A中找到了show(A obj),同时由于a2是B类的一个引用且B类重写了show(A obj),因此最终会调用子类B类的show(A obj)方法,结果也就是B and A。

      分析8:

          b.show(c),b是一个引用变量,类型为B,则this为b,c是C的一个实例,于是它到类B找show(C obj)方法,没有找到,转而到B的超类A里面找,A里面也没有,因此也转到第三优先级this.show((super)O),this为b,O为C,(super)O即(super)C即B,因此它到B里面找show(B obj)方法,找到了,由于b引用的是类B的一个对象,因此直接锁定到类B的show(B obj),输出为"B and B”。

         按照同样的方法我也可以确认其他的答案。
        当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。这我们用一个例子来说明这句话所代表的含义:a2.show(b);

         这里a2是引用变量,为A类型,它引用的是B对象,因此按照上面那句话的意思是说有B来决定调用谁的方法,所以a2.show(b)应该要调用B中的show(B obj),产生的结果应该是“B and B”,但是为什么会与前面的运行结果产生差异呢?这里我们忽略了后面那句话“被调用的方法必须是在超类中定义过的”,那么show(B obj)在A类中存在吗?根本就不存在!所以这句话在这里不适用?那么难道是这句话错误了?非也!其实这句话还隐含这这句话:它仍然要按照继承链中调用方法的优先级来确认。所以它才会在A类中找到show(A obj),同时由于B重写了该方法所以才会调用B类中的方法,否则就会调用A类中的方法。

 

  

posted @ 2018-10-26 10:22 ForeverYoungCoder 阅读( ...) 评论( ...) 编辑 收藏
CentOS 7下Oracle 11G RAC静默安装避坑指南:从网络规划到共享存储配置全流程 本文详细介绍了在CentOS 7环境下进行Oracle 11G RAC静默安装的全流程,包括网络规划、共享存储配置和系统参数调优等关键步骤。特别针对静默安装过程中的常见问题提供了实用的避坑指南和优化建议,帮助技术人员高效完成企业级数据库部署。 阅读详情

相关推荐

Knewton自适应学习平台实战:如何用大数据打造个性化教育体验

本文深入解析Knewton自适应学习平台如何利用大数据技术构建个性化教育体验。通过多维度数据采集、动态认知诊断模型和智能推荐系统,平台能精准识别学生知识盲区,提供定制化学习路径。实战案例显示,该方案显著提升完课率并优化学习效率,展现了自适应学习技术的教育变革潜力。

info6的博客 505

Java面向对象编程 实验报告

一、实验目的: 1. 理解 Java 语言是如何体现面向对象编程基本思想的;2. 掌握类的声明以及对象的创建;3. 了解类的成员变量和成员方法的特性以及类的构造方法的使用。 二、实验环境: 一台配置有java环境,装有eclipse的电脑。 三、实验内容:(写出主要的内容)(一)实验要求 1. 编写一个长方体类,通过类中的一个成员方法来初始化类中的成员变量,并通过另外一个方法来计算长方体的体积。2...

attack_5的博客 2万+

提升RAG效果:为何 JSON 格式远胜 Markdown?

在构建强大的 RAG (检索增强生成) 系统时,文档解析是至关重要的第一步。它直接影响着后续的检索效率和生成质量。在众多文档格式中,JSON (JavaScript Object Notation) 格式正逐渐展现出其相对于传统 Markdown 格式的巨大优势。本文将深入探讨 JSON 在 RAG 系统文档解析中的卓越之处,并结合具体案例,让你理解为何 JSON 才是构建下一代智能应用的更优选择。RAG 系统的核心目标是让模型能够利用外部知识库,生成更精准、更贴合实际的答案。

simoncool23的博客 2718

Java面向对象程序设计 java实验报告第三个

RunYear.java  输出1900到2000年之间的所有润年

水中加点糖 2840

MQTT在智能家居中的实战:用Android手机控制ESP8266设备(基于EMQX)

本文详细介绍了如何利用MQTT协议构建一个完整的智能家居控制系统,通过Android手机App远程操控ESP8266设备。文章提供了从EMQX服务器部署、ESP8266端Arduino固件开发到Android客户端搭建的完整实战指南,并深入探讨了系统联调、稳定性优化与安全加固等关键环节,为物联网开发者提供了一套可复用的解决方案。

ujm567890的博客 457

接入 AI 之后,为什么测试和排障还是没有真正变快?

如果你们准备做平台型 AI,不要先从聊天入口开始想。先把真实数据采上来;再把链路、版本、快照、报告这些核心对象建稳;再把历史沉淀、反馈、检索能力补齐;最后再让 AI 围绕这些对象去工作。这样做出来的 AI,才更容易从“看起来聪明”走向“真正省时间”。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 527

Java实验报告之java面向对象编程

一、实验目的:1. 理解 Java 语言是如何体现面向对象编程基本思想的;2. 掌握类的声明以及对象的创建;3. 了解类的成员变量和成员方法的特性以及类的构造方法的使用。二、实验环境:Eclipse三、实验内容: 1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length)、宽(width)和高(heigth),再定义一个方法void setBox(int l...

ccccc49813645075的博客 3252

使用蒙特卡洛模拟方法在MATLAB中估算居里温度: 一个详细而通俗的指南

居里温度是磁性材料失去磁性的温度。但是,计算机模拟为我们提供了一个在理论和实验之间的桥梁,使我们能够在不进行实际测量的情况下估计这一重要参数。在下一部分,我们将详细介绍蒙特卡洛迭代的核心代码,以及如何使用它来模拟磁性材料中原子的行为。在估算居里温度的上下文中,我们将使用蒙特卡洛方法来模拟磁性材料中的原子或分子的行为。通过使用蒙特卡洛方法,我们可以在MATLAB中估算居里温度,从而为理论研究和实验设计提供有价值的信息。:我们使用的是一个有限的尺寸的网格模型,这可能导致一些大小效应,特别是在接近居里温度时。

qq_38334677的博客 977

Java基础-面向对象的特征

面向对象的特征:继承、封装和多态    继承:    封装:    多态:    

编程老Y 277

若依框架二次开发——RuoYi-AI 本地部署流程

若依框架二次开发——RuoYi-AI 本地部署流程

bjzhang75的博客 1784

【WLAN】【调试】如何使用Wireshark分析加密的WiFi数据包

- 当配置网卡为monitor 模式的情况下,可以使用 wireshark来抓取空口报文; - 如果WiFi采用非Open加密方式,则从报文中仅能分析到 802.11协议层,更底层(如DHCP、ICMP、TCP等)被加密,此时可以使用 wireshark 来完成解密。 - 解密之后,可以通过icmp、tcp等关键词过滤报文。

一介草民,只为生活。 2985

Java面向对象(基础篇):一

1.面向对象思想 面向对象作为java语言的核心内容,很多初学的小伙伴在刚接触面向对象的时候,脑子都是晕晕乎乎的,什么是类?什么是对象?他们的关系是怎么样的?等等问题一拥而出,今天我就为大家做一下我自己面向对象的学习分享。 在学习面向对象之前,我先给大家看一幅图: 大家观察这幅图,不难看出:第一个框图从起床到去上课坐车,每一步的动作都很具体;而第二个框图,我们只需要将衣服放入洗衣机,然后洗完再将衣服拿出来即可。那么第一幅框图我们就可以把它看作是“面向过程”,而我们的第二幅款图则就是我们今天的主角“面向对象”

zjdzka的博客 9210

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java基础篇之面向对象篇(2021)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、面向对象1、面向对象思想2、三大特性3、类与对象4、对象创建时内存二、使用步骤1. 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、面向对象 1、面向对象思想 1. 面向过程到面向对象的思想层面的转变 2. 面向过程关注的是执行过程 3. 面向对象关注的是 具备功能的对象 4. 面向过程到面向对象,从程序员思想上是 从执行者到指挥者的转变 2、三大特性 1.封装性:所有的内容外界不可见 2.继承性:将其他的功能

m0_50677223的博客 2597

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

【Java基础】Java 面向对象的三大特征

在 Java 编程的领域中,面向对象编程(Object - Oriented Programming,OOP)是其核心思想,而封装、继承和多态这三大特征则是 OOP 的基石。它们为开发者提供了强大的工具,使得代码更加模块化、可维护、可扩展以及可复用。封装、继承和多态是 Java 面向对象编程的三大核心特征,它们相互关联、相互促进,共同构建了 Java 强大的面向对象编程体系。封装通过访问修饰符和访问器方法将数据和操作封装在一起,保护了数据的安全性,提高了代码的可维护性和可复用性。

小李同学的博客 1704

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JAVA——面向对象(基础篇)

告诉我们,如何正确设计对象的属性和方法;原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为;

2301_80799155的博客 2625

Java面向对象三大特征 - 继承篇

继承是类与类之间的一种关系多个子类,继承单独的某个父类,多个子类就可使用单独的这个父类的属性和方法了子类我们也称为派生类,父类也称为基类或者超类。

m0_71485750的博客 2138

Java基础篇面向对象总结

"理解万事万物皆对象" 基本类型和引用类型 匿名对象的使用 方法重载loading.... 方法重写 方法重载与方法重写的区别: 可变个数的形参 递归地使用 封装和隐藏 四种权限修饰符 继承 多态 属性 方法 构造器 代码块 内部类(了解) this关键字 package关键字 import关键字 super关键字 instanceof关键字 static关键字 abstract关键字 Interface关键字 equals() toString()方法 单例模式

weixin_44606952的博客 5232

JavaSE基础-(1)面向对象特征

熟练的使用多态,继承,封装也可以在软件设计开发中很好的提高开发效率

菜菜bu菜的博客 1万+

夯实Java基础系列1:Java面向对象三大特性(基础篇)

本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理。 具体代码在我的GitHub中可以找到: https://github.com/h2pl/MyTech 文章首发于我的个人博客: https://h2pl.github.io/2018/04/22/javase1/ 三大特性:继承 封装 多态 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来实...

Java技术江湖 7648

java基础语法+面向对象三大特征预习笔记

(1)封装性:将数据和对数据的操作封装在一起,通过抽象,即从具体的实例中抽取出共同的性质形成的一般概念,例如类的概念;(4)分支结构:简单点来说Java中的分支结构与C语言中的大致相同,都是有if-else的分支结构与switch的分支结构,但是不同的是Java中对布尔类型数据的区分更加细致;最后结果会返回10,但是要注意length与length()是两个不同的东西:length返回的是一个数组的长度,而length.()返回的是字符串中有多少个char字符;如果执行如下代码,则会发生的报错如图。

Green_H6的博客 1512

Java基础篇面向对象作业—01

Java基础篇面向对象作业—01 问题一:什么是面向对象? 面向对象是一种编程思维,是相对于传统的面向过程的思维来讲的; 传统的面向过程强调的是解决问题的具体步骤,具体方法,编程思路是自顶向下,不断分解地解决问题。 面向对象更加强调解决问题的主体,谁来解决问题,创建可以解决问题的对象,来操作数据,面向对象的编程思路是自底向上,不断拼接; 面向对象的好处有很多,比如面向对象更符合人类的思维模...

Steven_YE 239

Java中面向对象三大特征总结

JAVA中面向对象的三大特征:         面向对象具有继承性(Inheritance)         面向对象具有多态性(Polymorphism)         面向对象具有封装性(Encapsulation) 一、继承          多个类具有共同的属性(成员变量)与行为(成员方法)的时候,将这些共同的部分抽取出来定义到一个公共的类中,其他及各类可以与这个公共的类形成继

Wei_HHH的博客 1万+

Java基础篇——面向对象之三大基本特征

目录 1、面向对象思想 1.1、面向对象定义 1.2、面向对象与面向过程的区别 1.3、类的对象 2、三大基本特征 2.1、封装 2.2、继承 2.3、多态 多态优点: 多态存在三个必要条件: 3、补充:抽象 Java 是面向对象的高级编程语言,类和对象是 Java 程序的构成核心。围绕着 Java 类和 Java 对象,有三大基本特性:封装、继承、多态。封装是 Java 类的编写规范,继承是类与类之间联系的一种形式,而多态为系统组件或模块之间解耦提供了解决方案。 1、面向..

Flychuer的专栏 1172

Java基础篇面试题 2024

Java基础篇面试题 2024 每日持续更新中,文中包含Java全技术栈面试题合集地址并可直接跳转

qq_58353992的博客 1872
上一篇: MYSQL,分别用一条语句交换两列的值与两行的值
下一篇: 一、基础篇--1.1Java基础-final, finally, finalize 的区别
口德尔
博客等级 码龄14年 3粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值