代码:
class A { public String show(D obj){ return ("A and D"); } public String show(A obj){ return ("A and A"); } } class B extends A { public String show(B obj){ return ("B and B"); } public String show(A obj){ return ("B and A"); } } class C extends B{} class D extends B{} A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println(a1.show(b));//(1) System.out.println(a1.show(c));//(2) System.out.println(a1.show(d));//(3) System.out.println(a2.show(b));//(4) System.out.println(a2.show(c));//(5) System.out.println(a2.show(d));//(6) System.out.println(b.show(b)); //(7) System.out.println(b.show(c));//(8) System.out.println(b.show(d));//(9)
打印结果:
A and A //(1)
A and A //(2)
A and D //(3)
B and A //(4)
B and A //(5)
A and D //(6)
B and B //(7)
B and B //(8)
A and D //(9)
分析:
实际上这里涉及方法调用的优先问题 ,优先级由高到低依次为:
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”。
再比如(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”。
相关推荐
2. **面向对象编程**:系统采用纯面向对象的编程方式,利用Java语言的封装、继承和多态特性,提高了代码的可重用性和可维护性。 3. **数据库设计**:系统内置了多种数据库支持,包括MySQL、Oracle等主流数据库。...
多态是面向对象编程的重要特性,它允许一个接口被多种不同的数据类型实现,增强了代码的灵活性和可扩展性。 多态的实现方式 Java中的多态主要通过继承、接口和重写实现,子类可以覆盖父类的方法,使得在运行时能够...
11.Java 面向对象编程三大特性: 封装 继承 多态 关于继承的3点 12.String StringBuffer 和 StringBuilder 的区别是什么 String 为什么是不可变的 可变性、线程安全性的研究 13.自动装箱与拆箱 14.在一个静态方法内...
面向对象:Java全面支持面向对象的特性,如封装、继承和多态,使得代码更易于维护和扩展。 安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 ...
JAVA 封装、继承、多态 三大特性以及实操
面向对象:Java全面支持面向对象的特性,如封装、继承和多态,使得代码更易于维护和扩展。 安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 ...
Java——多态 多态的特性 1.可替换性(substitutability)。多态对已存在代码具有可替换性。 例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环, 也同样工作。 2.可扩充性(extensibility)。多态对代码...
接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象...Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。
多态是面向对象编程中的一个重要特性,它允许一个类的引用变量指向多种实际类型。这意味着在运行时,可以调用不同的方法实现不同的功能 多态的实现方式 多态可以通过继承、接口和重写实现。子类继承父类后,可以使用...
栈帧的内部结构 ...3.动态链接 (Dynamic Linking)(或执行"运行时常量池"的方法引用)----深入理解Java多态特性必读!! 4.方法返回地址(Return Adress)(或方法正常退出或者异常退出的定义) 5.一些附加信息
含基础篇,核心篇,框架篇,微服务篇 1.1.1 面向对象特征 封装,继承,多态和抽象 1、 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 3...
Java语言程序设计_第5章_接口与多态课件及源代码 第5章 接口与多态(熊).ppt
Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...
java的三大特性封装--继承--多态,每一步都是很关键的,其中实现多态又时很有用的,使用多态能有效降低程序的耦合度,基于我对多态理解写的一个简单的小案例,合适初学者或小白使用,里面都注释了代码含义,仅自己...
核心,包括了 Java 运行环境 JRE、Java 工具和 Java 基础类库。Java Runtime Environment(JRE)是运行 JAVA 程序所必须的环境的集合,包含 JVM 标准实 现及 Java 核心类库。JVM 是 Java Virtual Machine(Java ...
java基础知识点: 1、Java语言基础:包括环境搭建、基本数据类型、包装类、变量、常量定义、控制结构、String字符串...面向对象是任何编程语言的重要内容,封装性以及子类继承与多态特性是完成Java代码的重要基础;J
Java8新特性终极指南 序列化和反序列化 继承、封装、多态的实现原理 容器 Java集合类总结 Java集合详解1:一文读懂ArrayList,Vector与Stack使用方法和实现原理 Java集合详解2:Queue和LinkedList Java集合详解3:...
第7章 在对象之间搬移特性 141 7.1 Move Method(搬移函数) 142 7.2 Move Field(搬移字段) 146 7.3 Extract Class(提炼类) 149 7.4 Inline Class(将类内联化) 154 7.5 Hide Delegate(隐藏“委托...
3.2. Java代码中的“;”、“{}”、“ ” 3-5 3.3. 标识符 3-5 3.4. 数据类型 3-6 3.5. 命名规则 3-6 4. 三•表达式和控制流 4-6 4.1. 变量和作用域 4-6 4.2. 操作符 4-7 4.3. 数字类型之间的转换 4-7 4.4. 强制类型...
它将演示如何创建类和对象,如何定义和使用继承关系,如何利用封装实现数据隐藏,以及如何利用多态特性实现灵活的代码设计等。最终目标是帮助学习者构建良好的面向对象设计思路,并应用到实际的软件