`
hellowuyao
  • 浏览: 10106 次
  • 性别: 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零基础-多态.md

    ### Java零基础-多态 #### 内容概要 本文旨在深入浅出地介绍Java中的多态(Polymorphism)这一核心概念及其具体应用。读者不仅能够理解多态的基本含义,还能掌握如何在实际编程中运用多态,提高代码的灵活性和可...

    Java-多态--学习笔记.docx

    Java中的多态性是面向对象编程的一个核心特性,它允许我们设计更加灵活和可扩展的代码。在Java中,多态性(Polymorphism)主要体现在两个方面:方法的重写(Overriding)和接口的实现(Interface Implementation)。...

    java面向对象-多态.docx

    ### Java面向对象编程——多态性详解 ...多态性是Java面向对象编程的核心特性之一,掌握好这一特性对于提高代码质量和可维护性至关重要。希望每位同学都能通过本次实验有所收获,并在未来的编程学习中不断进步。

    Java实验-多态.docx

    在Java编程中,多态性(Polymorphism)是面向对象设计的重要特性之一,它允许我们使用一个类的引用去调用子类的方法,从而实现不同的行为。这使得代码更加灵活,可扩展性更强。本实验的目标是深入理解多态性的概念...

    java实验报告(2)-多态和继承

    在Java编程语言中,多态和继承是面向对象设计的核心概念,它们极大地增强了代码的灵活性、可重用性和可扩展性。本实验报告将深入探讨这两个关键特性,并通过具体的实例来演示它们的应用。 1. **继承** 继承是面向...

    java基础教程----精华版

    Java是一种广泛使用的面向对象的编程语言,以其平台独立性、安全性、健壮...这份"java基础教程----精华版"应该涵盖了这些主题,并且可能还有更多的实践指导和示例代码,对于学习和巩固Java编程基础是非常有价值的资源。

    java中多态的内存分析

    Java中的多态性是面向对象编程的一个核心特性,它允许我们使用父类引用指向子类对象,从而实现灵活的代码设计。多态性分为编译时多态和运行时多态,其中运行时多态是Java中最常见的形式,也称为动态绑定。在深入探讨...

    java入门基础-继承及多态

    ### Java入门基础:继承及多态 #### 一、继承 继承是面向对象编程(OOP)的一个核心概念,它允许创建一个新类(称为子类或派生类),该类继承了现有类(称为父类或基类)的特征。在Java中,一个类可以从另一个类继承...

    【IT十八掌徐培成】Java基础第06天-03.多态-类多态-接口多态-同名属性问题.zip

    在Java中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性使得代码更加灵活,能够处理不同类型的对象,提高代码的复用性。 在Java中,多态分为类多态和接口多态。类多态主要...

    290.288.JAVA基础教程_面向对象(中)-多态练习:调用方法和属性(290).rar

    在这个"290.288.JAVA基础教程_面向对象(中)-多态练习:调用方法和属性(290)"的教程中,我们将深入探讨Java中的多态性,这是面向对象编程中的一个重要概念。多态性允许我们使用一个类的引用来调用子类的方法和属性,...

    java 三大特性--封装、继承和多态理解

    Java编程语言以其强大的功能和广泛的应用而闻名,其中三大特性——封装、继承和多态是其核心概念,对于理解和编写高效、可维护的代码至关重要。 **封装**是面向对象编程的基础,它涉及到将数据(属性)和操作这些...

    源代码+报告-Java的继承和多态编程

    总结来说,这个实验深入地探讨了Java中的继承和多态特性,通过一个实际的工资管理系统案例,展示了如何在实际编程中应用面向对象编程的基本原则。它帮助学习者理解如何定义类、创建对象、使用继承来构建类的层次结构...

    day02-多态&抽象类&接口1

    多态是Java面向对象设计的重要特性,它提供了代码的复用性和灵活性。通过多态,我们可以设计出更加通用的代码,同时保持良好的扩展性。在实际开发中,多态广泛应用于各种场景,如集合框架中的泛型、设计模式等。理解...

    java基础_多态

    在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来代表多种不同的类,这使得代码更加灵活,易于扩展。它主要体现在方法的多态和对象的...

    java学习资料-Java继承和多态

    Java 继承和多态是面向对象...综上所述,Java的继承和多态机制以及封装原则是构建面向对象软件的基础,它们使得代码更加模块化、易于维护和扩展。通过学习和熟练运用这些概念,开发者可以设计出高效、可复用的代码。

    Java 面向对象三大特性之多态

    面向对象编程是Java的核心特性,其中封装、继承和多态是三大基石。在这个主题中,我们将专注于"多态"这一特性,它是Java编程灵活性和可扩展性的重要体现。 多态(Polymorphism)在希腊语中意为“多种形态”,在编程...

    java棋类游戏--炮兵棋源代码

    【Java棋类游戏--炮兵棋源代码】是一款基于Java编程语言实现的棋类游戏,主要涉及了面向对象设计、游戏逻辑控制、图形用户界面(GUI)开发等多个方面的知识点。以下将详细介绍这些关键领域的相关知识。 1. **Java...

    Java基础练习代码

    首先,Java是一种面向对象的编程语言,它的核心特性包括封装、继承和多态。在练习代码中,你会看到如何定义类(class)并创建对象,这是封装的体现;同时,通过继承(extends)可以实现代码复用,让类与类之间形成...

    Java中多态的具体应用代码

    在Java编程语言中,多态性(Polymorphism)是面向对象编程的三大特性之一,另外两个是封装和继承。多态性允许我们使用一个接口来代表多种类型的对象,这使得代码更加灵活、可扩展且易于维护。在这个主题中,我们将...

    java基础ppt--传智播客的内容

    Java是一种面向对象的语言,其三大特性——封装、继承和多态是核心概念。封装涉及类和对象的概念,以及访问修饰符(public, private, protected)。继承允许子类继承父类的属性和方法,多态则提供了代码的灵活性和...

Global site tag (gtag.js) - Google Analytics