Java父类(super class)调用子类方法

标签 java class inheritance

我有这些类(class):

class A {
  public void f() { System.out.println("f() in A"); }
  public void g() { System.out.println("g() in A"); f(); }
}

class B extends A {
  public void f() { System.out.println("f() in B"); }
}

为什么

B b = new B();
A a = b;
a.g();

打印出来

g() in A
f() in B

不是

g() in A
f() in A

有什么我想念的吗?

最佳答案

这是因为 Java 使用了 dynamic dispatch默认(和强制)在类的方法上。

此功能可确保在调用方法时,选择执行该方法的最专用版本。在您的情况下,由于 B extends A,这意味着 Bpublic void f() 实现比 >一个。因此,虽然 A a 是静态类型 A,但它是动态类型 B 并且选择了该方法。

关于Java父类(super class)调用子类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181393/

相关文章:

c++ - 为什么 C++ 不允许基类实现派生类的继承接口(interface)?

java - 如何使用面向对象设计实现图搜索(DFS)

java - Jersey 停止使用 InjectionManagerFactory 未找到

Java 8 流并从调用 boolean 方法设置属性

java - 您可以定义抽象类的子类而不定义父类(super class)中定义的任何抽象方法吗?为什么?

c++ - 继承成员函数的意外输出

inheritance - 在 Cython 包装类中复制继承结构

java - 将Java代码转换为delphi的问题

php - "call to undefined function"调用类方法时出错

python - Python 类中的方法命名空间/集合