`
equals
  • 浏览: 11506 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

继承多态疑惑

阅读更多
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(A obj){  
           return ("B and A");  
    }   
    public String show(B obj){  
           return ("B and B");  
    } 
}  
class C extends B{}   
class D extends B{} 

public class MultiTest{ 
public static void main(String[] args){ 
        A ab = new B();  
        B b = new B();  
        C c = new C(); 
        System.out.println(ab.show(b));   
        System.out.println(ab.show(c)); 
} 
}

输出结果为:
B and A
B and A

以下是我的见解,接触java不久,也不知道具体对不对,但是这是我认为合理的解释:
java有编译期和运行期,当代码编译时候(这个时候还没有内存对象创建),ab编译成的字节码中描述的是A,对你写的第一个ab.show()方法标记的是A中的方法,此时A中没有show(B),所以这个时候b就向上造型为A,show方法标记就为A中的show(A),然后运行期执行的时候,就是调用的内存对象,这个时候show方法要调用的时候就找的是具体对象,即ab调用B中的show,这个时候show()方法调用时,JVM发现在具体对象ab中有重写的show(A)方法,于是就输出的是B and A。
得出这样的结论是因为刚我在我的机器上跑程序的时候,发现,删掉B中的show(A)方法,控制台打印的是A and A;而且将代码A ab = new B()改成B ab = new B()结果就是B and B。
分享到:
评论

相关推荐

    c++课后答案

    C++的基础知识包括语法、类和对象、模板、继承、多态等核心概念。语法上,C++结合了C语言的简洁性和面向对象编程的特性。类和对象是C++的核心,类定义了数据结构和操作这些数据的方法,而对象是类的实例,具有特定的...

    Java程序员考试中需要注意的几点

    Java语言的核心在于其面向对象的特性,包括封装、继承和多态。理解面向对象编程意味着要了解如何定义类、对象,以及它们之间的关系。封装是将数据和操作数据的方法捆绑在一起,保护数据不受外部干扰;继承则是实现...

    基于BOPPPS模式的面向对象程序设计(Java)课程教学实践.zip

    1. **背景(Background)**:在教授Java面向对象编程时,首先需要介绍面向对象的基本概念,如类、对象、封装、继承、多态等。这些是OOP的核心概念,为后续的学习奠定基础。同时,需要讲解Java语言相对于其他编程语言...

    解决java中的疑惑

    4. **面向对象编程**:封装、继承和多态是OOP的三大特性。初学者需掌握接口与抽象类的区别、访问修饰符的作用以及如何实现多态。 5. **字符串操作**:Java中的String是不可变的,这可能导致性能问题。了解...

    C++程序设计 Y.Daniel Liang著 习题答案

    在C++程序设计中,习题涵盖了语言的基础概念、语法结构、控制流(如if语句、switch语句、循环)、函数的使用、数组和指针的操作、类与对象(面向对象编程的核心概念)、继承与多态等核心知识点。通过解答这些习题,...

    钱能C++程序设计教程(第二版)答案

    《钱能C++程序设计教程》第二版作为一本教学用书,很可能按照C++的学习路径,逐步介绍了变量、运算符、流程控制、函数、数组、指针、结构体与联合、类与对象、继承、多态、模板、异常处理等核心概念。 每章的答案...

    《 C++编程思想》(第二版第一卷)源码及练习题答案

    C++是一种强大的、面向对象的编程语言,它在继承了C语言的效率和灵活性的同时,引入了类、封装、继承、多态等面向对象特性。《C++编程思想》一书以其深入浅出的讲解方式,帮助读者建立起坚实的C++基础。 在书中,...

    C++面试 primer plus

    本书的内容分为多个章节,每个章节都涵盖了不同的C++知识点,例如智能指针、STL、模板、继承、多态等等。作者小贺强烈推荐读者阅读加餐篇-图解STL源码(第十三章-第十七章),这是STL源码剖析的精华中的精华,能够让...

    《Java2实用教程》课后习题参考答案(第三版)

    在Java2实用教程中,读者会接触到诸如基本语法、数据类型、控制结构、类与对象、继承与多态等核心概念。课后习题设计巧妙,旨在让读者通过实践来理解和掌握这些知识。 习题参考答案涵盖了书中所有的练习,包括基础...

    C++对象模型.pdf

    本书致力于深入解析C++编译器在处理C++代码时所采取的复杂对象模型及其背后的底层机制,特别是针对构造函数、解构函数、虚函数、继承、多态等面向对象特性的工作原理。通过对这些内容的深入讲解,读者将能够掌握C++...

    c#1000例.rar

    C#的核心特性包括类、对象、接口、继承、多态等面向对象编程概念。其中,类是定义对象的模板,对象是程序的基本运行单元;接口则提供了一种规范,定义了对象必须遵循的行为;继承允许子类从父类中继承属性和方法,...

    深度探索C++对象模型[侯捷]

    C++作为一种支持面向对象编程的语言,其对象模型涉及构造函数、解构函数、虚函数、继承、多态等一系列复杂的概念。这些概念在C++编译器内部的处理方式和对程序执行的影响,是许多程序员希望能够深入了解的内容。侯捷...

    《信息学奥赛课课通(C++)》(49375-00)配套资料

    它的主要特点是面向对象,支持类、继承、多态等概念,同时也保留了C语言的底层控制功能,使得程序运行效率高且可扩展性强。在信息学竞赛中,C++因其高效的性能和灵活性,成为了许多参赛者的首选语言。 课课通的学习...

    21天学通C++ (第五版)

    其次,C++的特色在于其面向对象特性,包括类、对象、封装、继承和多态。理解这些概念是掌握C++的关键。类和对象是C++中实现数据抽象和模块化设计的核心,而封装则保证了代码的安全性和可维护性。继承允许创建新的类...

    c++等级考试二级模拟测试题

    3. **继承与多态**:继承允许创建一个新类,该类继承自现有类的属性和方法,多态则提供了动态绑定和接口的实现,使代码更加灵活和可扩展。 4. **模板与泛型编程**:模板是C++中的一个重要特性,它允许创建泛型函数...

    (官方)Java语言程序设计(原书第8版)基础篇和进阶篇复习题和编程题答案

    2. **进阶篇编程题**:随着学习的深入,进阶篇涉及的内容包括类与对象的高级特性(如继承、多态、抽象类和接口)、异常处理、集合框架、输入/输出流以及线程等。编程题的答案将帮助你实践这些高级技术,提高问题解决...

    C#初学者快速入门教材(教程)

    封装是保护数据和行为的方式,继承则允许子类继承父类的属性和方法,多态则增强了代码的灵活性和可扩展性。 第四部分:深入了解C# 深入C#会涉及更多高级主题,如委托、事件、匿名方法、Lambda表达式、 LINQ...

    java基础练习黑心餐馆订餐程序

    这将涉及Java的面向对象编程(OOP)原理,包括封装、继承和多态。 1. 封装:Java中的类是一种封装机制,它允许我们将数据和操作数据的方法打包在一起。在这个订餐程序中,每个菜品可能是一个类,包含菜品名称、价格...

    Bjarne Stroustrup语录.rar

    首先,"《A Brief Look at C++.pdf》"可能涵盖了C++的基础知识和高级特性,比如面向对象编程(OOP)的概念,包括类、对象、封装、继承和多态等。Stroustrup强调C++的灵活性和效率,同时也指出其复杂性,提醒开发者需...

    C++常见问题问与答

    C++是C语言的扩展,增加了面向对象编程(OOP)的概念,如类、对象、继承、多态等,同时引入了模板和异常处理等功能。 2. **C++的基本结构** C++程序通常由预处理指令、函数定义和主函数(main)组成。预处理指令...

Global site tag (gtag.js) - Google Analytics