`
hellowuyao
  • 浏览: 9641 次
  • 性别: Icon_minigender_1
  • 来自: 北京市
最近访客 更多访客>>
社区版块
存档分类
最新评论

java基础特性-多态-代码分析(二)

阅读更多

代码:

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”。

分享到:
评论

相关推荐

    Java毕业设计-JAVA SMART系统-系统框架设计与开发(源代码+论文)(1).rar

    2. **面向对象编程**:系统采用纯面向对象的编程方式,利用Java语言的封装、继承和多态特性,提高了代码的可重用性和可维护性。 3. **数据库设计**:系统内置了多种数据库支持,包括MySQL、Oracle等主流数据库。...

    Java中的多态.pptx.pptx

    多态是面向对象编程的重要特性,它允许一个接口被多种不同的数据类型实现,增强了代码的灵活性和可扩展性。 多态的实现方式 Java中的多态主要通过继承、接口和重写实现,子类可以覆盖父类的方法,使得在运行时能够...

    Java语法基础-面试专题及答案

    11.Java 面向对象编程三大特性: 封装 继承 多态 关于继承的3点 12.String StringBuffer 和 StringBuilder 的区别是什么 String 为什么是不可变的 可变性、线程安全性的研究 13.自动装箱与拆箱 14.在一个静态方法内...

    AES-Java-iOS-Android.zip

    面向对象:Java全面支持面向对象的特性,如封装、继承和多态,使得代码更易于维护和扩展。 安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 ...

    封装、继承、多态.docx

    JAVA 封装、继承、多态 三大特性以及实操

    Java实现FP-growth算法.zip

    面向对象:Java全面支持面向对象的特性,如封装、继承和多态,使得代码更易于维护和扩展。 安全:Java提供了丰富的安全特性,如禁止指针运算、自动内存管理和异常处理机制,以减少程序错误和恶意攻击的可能性。 ...

    Java——多态

    Java——多态 多态的特性 1.可替换性(substitutability)。多态对已存在代码具有可替换性。 例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环, 也同样工作。 2.可扩充性(extensibility)。多态对代码...

    D11接口,多态.zip_d11接口_java接口_mannerglc_多态

    接口是功能的集合,同样可看做是一种数据类型,是比抽象类更为抽象...Java中多态的代码体现在一个子类对象(实现类对象)既可以给这个子类(实现类对象)引用变量赋值,又可以给这个子类(实现类对象)的父类(接口)变量赋值。

    深入理解Java多态.pptx.pptx

    多态是面向对象编程中的一个重要特性,它允许一个类的引用变量指向多种实际类型。这意味着在运行时,可以调用不同的方法实现不同的功能 多态的实现方式 多态可以通过继承、接口和重写实现。子类继承父类后,可以使用...

    Java虚拟机栈--栈帧.docx

    栈帧的内部结构 ...3.动态链接 (Dynamic Linking)(或执行"运行时常量池"的方法引用)----深入理解Java多态特性必读!! 4.方法返回地址(Return Adress)(或方法正常退出或者异常退出的定义) 5.一些附加信息

    Java经典面试题(答案解析)

    含基础篇,核心篇,框架篇,微服务篇 1.1.1 面向对象特征 封装,继承,多态和抽象 1、 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 3...

    Java语言程序设计_第5章_接口与多态课件及源代码

    Java语言程序设计_第5章_接口与多态课件及源代码 第5章 接口与多态(熊).ppt

    Java面试宝典-经典

    Java基础部分 7 1、一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2、Java有没有goto? 7 3、说说&和&&的区别。 8 4、在JAVA中如何跳出当前的多重嵌套循环? 8 5、switch语句能否作用在byte...

    duotai.zip源码文件

    java的三大特性封装--继承--多态,每一步都是很关键的,其中实现多态又时很有用的,使用多态能有效降低程序的耦合度,基于我对多态理解写的一个简单的小案例,合适初学者或小白使用,里面都注释了代码含义,仅自己...

    java基础面试题目详解

    核心,包括了 Java 运行环境 JRE、Java 工具和 Java 基础类库。Java Runtime Environment(JRE)是运行 JAVA 程序所必须的环境的集合,包含 JVM 标准实 现及 Java 核心类库。JVM 是 Java Virtual Machine(Java ...

    Java学习用例demo

    java基础知识点: 1、Java语言基础:包括环境搭建、基本数据类型、包装类、变量、常量定义、控制结构、String字符串...面向对象是任何编程语言的重要内容,封装性以及子类继承与多态特性是完成Java代码的重要基础;J

    【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识

    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(隐藏“委托...

    java学习笔记 初学者必读

    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. 强制类型...

    src.zip Java的面向对象编程·讲解代码

    它将演示如何创建类和对象,如何定义和使用继承关系,如何利用封装实现数据隐藏,以及如何利用多态特性实现灵活的代码设计等。最终目标是帮助学习者构建良好的面向对象设计思路,并应用到实际的软件

Global site tag (gtag.js) - Google Analytics