Polymorphism多态
把一个子类的对象赋给父类的引用变量时,该对象的编译时类型是父类,运行时类型是子类。它在编译时只能调用父类的方法,运行时则调用子类的方法。
//SubClass extends BaseClass BaseClass poly = new SubClass();
父类是子类的超集。事实上,上面语句里面的poly对象在编译时,只能直接调用BaseClass类中定义的方法和属性,如果SubClass中有重写BaseClass中的方法,那么poly对象将在运行时调用SubClass中重写的方法,poly对象不能直接调用SubClass中新增的方法。特别要注意的是,对于类定义当中的Field,不管SubClass中是否覆盖BaseClass中的Field,运行时总是会调用BaseClass中的Field。
class BaseClass{ public String str1 = "Base Class"; public void method1(){ System.out.println("父类方法一"); } public void method2(){ System.out.println("父类方法二"); } } class SubClass extends BaseClass{ public String str1 = "Sub Class"; publci String str2 = "String 2"; //重写了父类中的method2()方法 public void method2(){ System.out.println("子类重写的父类中的方法二"); } public void method3(){ System.out.println("子类新增的方法三"); } } public static void main(String args[]){ BaseClass poly = new SubClass(); //编译时错误,在BaseClass中未定义str2 System.out.println(poly.str2); //输出 Base Classs而不是 Sub Class,因为总是调用BaseClass中的Field值 System.out.println(poly.str1); //编译时错误,在BaseClass中未定义method3() poly.method3(); //调用BaseClass的方法method1() poly.method1(); //编译时调用的是BaseClass中的方法,实际运行时调用的是SubClass中的方法method2() poly.method2(); }
相关推荐
代码演示对java中多态的理解 从代码演示中更好的理解多态的作用
深入Java核心 Java中多态的实现机制
想要下载此文件,请先下载本人“java程序中的内存分配问题”,因为那个例子比较简单而且分析详细透彻,可以使你更容易理解,如果你对java程序执行过程中的内存分配有一定的了解,可以直接下载本文件
深入Java核心Java中多态的实现机制.pdf
java多态实现的课件,给那些需要的人 讲述了java多态的概念、分类、实现 综合案例讲解、总结多态的作用
深入Java核心 Java中多态的实现机制.docx
java多态、继承练习题,包含题目与答案,............................................................................................................
在Java中多态存在的必要条件是什么
Java开发之多态的具体应用,包含多态应用的实例和相应实例的代码。
主要java中接口,继承以及抽象等基础内容的实例,实初学者能刚好的理会多态的具体含义
多态的列子其中涉及到封装是java适应于java初学者学习和模仿,
java程序设计中,多态的实现和理解,通过代码演示java程序设计中,多态的实现和理解,通过代码演示
这边文章的编程代码:https://blog.csdn.net/qq_41086359/article/details/103650238 Java多态,面向对象编程题
Java多态的讲解
java的多态,是一个很重要的环节.但是要知道什么是多态!
关于java多态性和abstract修饰的使用 一个具体的实例 简单易懂
因此, 简单名称相同、特征签名也相同、但是方法返回值不同的两个方法可共存于同一个class文件中。 总结一下,讨论一个方法是否“相同”,这里涉及到了三个概念: 简单名称 方法特征签名 方法描述符