Java继承和多态的底层原理

xiaoxiao2022-07-06  31

当子类继承父类以后,子类的对象为什么可以访问到父类中定义的方法?当子类Override了父类中的方法以后,访问的是子类Override以后的方法,这是怎么实现的?当子类Override了父类的方法以后,还有办法得到父类的方法吗?博客:重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

子类已经覆盖了父类,并且重写了父类的方法, 一般来说, 就没有必要用子类调用父类中被覆盖的方法了.(否则就不要覆盖了啊)要实现也是可以的 ,我们 需要为子类提供一个其他的方法,用于去调用父类中被覆盖的方法 class A {//父类 public void print() { System.out.println("父类的print方法"); } } class B extends A {//子类 @Override public void print() { System.out.println("子类的print方法"); } // 在子类里创造一个方法去调用父类的方法 public void fuLeiPrint() { super.print(); //super指向父类 } } public class Test { public static void main(String[] args) { B b = new B(); b.print(); b.fuLeiPrint(); // A a =(A)b; // 这样强转还是打印的子类的方法,因为内存中还是子类 // a.print(); } }

为什么下面代码

public class Main { public static void main(String[] args) { Father father = new Child(); father.say(); } }

的输出为:

Hello From Child

呢? 明明是用的Father的引用去访问的子类的对象,按照多态的字面理解,应该表现出Father的方法。 我的解释如下:Father的引用指向的是Child的对象,而Child中又把Father中的方法给覆盖了,所有表现出来的还是Child中被覆盖的方法,不是Father中的方法。Father只是提供了一个View Port(视口)来访问Child对象。 博客:Java中方法的继承以及父类未被子类覆盖的方法调用的问题 下面博客讲解的更加深入: java:方法的虚分派(virtual dispatch)和方法表(method table) 自制Java虚拟机(五)实现继承、多态、invokevirtual Java语言的动态性-invokedynamic Java编程的逻辑 (17) - 继承实现的基本原理

转载请注明原文地址: https://www.6miu.com/read-4968553.html

最新回复(0)