多态:成员变量和成员方法的多态性
程序员文章站
2022-05-22 08:37:21
...
1、成员方法的多态性
public class Polymorphism{ public static void main(String[] agrs){ BasePolymorphism b = new SubPolymorphism(); b.method1(); } } class BasePolymorphism{ public BasePolymorphism(){ //注意:此处调用的将是子类的method2方法 this.method2(); } public void method1(){ System.out.println("BasePolymorphism method1"); //注意:此处调用的将是子类的method2方法 this.method2(); //因为父类的method3方法是私有的,在子类中不可见,所以子类无法覆盖该方法。 //即使子类中定义了同名方法,也只能算是重新定义了一个方法,该方法也不具有多态性 //注意:此处调用的是父类的method3方法 this.method3(); } //此方法会被子类的同名方法覆盖 public void method2(){ System.out.println("BasePolymorphism method2"); } private void method3(){ System.out.println("BasePolymorphism method3"); } } class SubPolymorphism extends BasePolymorphism{ //此方法会覆盖父类中的同名方法 public void method2(){ System.out.println("SubPolymorphism method2"); } //虽然该方法与父类中的方法完全相同,但由于父类中的该方法是私有的,所以此处的方法无法覆盖父类中的同名方法 //该方法只是子类新定义的一个方法 public void method3(){ System.out.println("SubPolymorphism method3"); } } /* 运行结果: SubPolymorphism method2 BasePolymorphism method1 SubPolymorphism method2 BasePolymorphism method3 */ /* 分析: 如果子类中的某个方法覆盖父类中的同名方法,那么即使是在父类中调用该同名方法,被调用的方法也是子类中的同名方法、而不是父类中的同名方法。 因此如果要在父类中调用将要被子类重写的方法时,必须格外小心。 父类中的私有方法在子类中是不可见的,所以子类无法覆盖父类中的私有方法。 即使子类定义了和父类的私有方法完全相同的方法,也不会覆盖父类中对应的私有方法,仅仅是在子类中定义了一个新方法。 */
2、成员变量的多态性
与成员方法不同,成员变量不具有多态性。通过引用变量来访问它包含的成员变量时,系统总是试图访问它编译时类型所定义的成员变量,而不是它运行时类型所定义的成员变量。
上一篇: springcloud eureka 服务注册中心
下一篇: 有关详解及应用的课程推荐10篇
推荐阅读
-
[Java] 父类和子类拥有同名的成员变量(fields)的情况
-
Java中成员变量与局部变量的区别、对象类型作为方法的参数和方法的返回值
-
编写一个表示二维平面上的点的类MyPoint,满足以下条件: 1、定义private的成员变量x和y,表示点的x和y坐标,类型为double
-
静态类、静态方法、静态成员和实例成员的比较
-
Java构造方法、成员变量初始化以及静态成员变量初始化三者的先后顺序是什么样的?
-
C++简单的子类继承父类访问父类的成员函数和成员变量
-
c++中基类和子类的成员变量同名,成员函数也同名
-
java中的类修饰符-成员变量修饰符-方法修饰符
-
Java基础知识回顾第四篇 - &和&&|方法重写重载|成员变量静态变量|抽象类接口多态
-
对继承与多态、成员变量的隐藏和方法重写、super关键字、final关键字、对象的上转型对象、抽象类的学习理解(java)