试图理解 class 在 java 中的继承

Trying to understand class inheritance in java

假设我有超级class

public class SuperSub {
  public void overideThisMethod(){
    System.out.println("Printed from Superclass");
  }
}

我有一个像这样的子 class,

public class SubClass2 extends SuperSub { 
  @Override
  public void overideThisMethod(){
    System.out.println("from subclass2");
  }
  public static void main(String[] args){
    SubClass2 subClass2= new SubClass2();
    subClass2.overideThisMethod();
    SuperSub superSub = new SuperSub();
    superSub.overideThisMethod();
  }
}

我从 运行 程序中得到输出:

run:
from subclass2
Printed from Superclass

输出不应该是,

run:
from subclass2
from subclass2

非常感谢任何澄清,谢谢!

扩展(也称为继承)不会修改超级class,但实际上使用您定义的扩展创建一个新的,就像那里的覆盖。

所以,两个 class 都存在,每个都有自己的逻辑。

在这里,您正在创建一个名为 SuperSub 的 class,它会打印 "Printed from Superclass"。然后您将其用作创建另一个 class SubClass2 的基础,其中 "masks" (a.k.a。覆盖)基本行为,在本例中通过打印 "from subclass2" 反而。

这样,如果您创建 class SuperSub 的对象,它的行为仍将与 SuperSub 相同。 分别地,如果你创建一个 class SubClass2 的对象,它将表现得像 SuperSub 和你定义的 "extensions" SubClass2(在本例中为重写行为)。

在您的示例中,SubClass2 class 扩展了 SuperSub,这意味着实例 SuperSub2 调用的所有方法在功能上与调用的方法相同通过一个实例 SuperSub 除了你已经覆盖的那些。

在变量 subClass2 的情况下,它是 SubClass2 的一个实例,这意味着它可以调用 SuperSub 的所有方法以及 SubClass2 的所有方法。

对于在两个 class 中都存在的方法,在您的情况 overideThisMethod 中,将根据变量的类型调用相应的方法。对于变量 subClass2,它是 class SubClass2 的一个实例,因此它调用其各自的方法(并打印 "from subclass2")。虽然变量 superSubSuperSub class 的实例,因此它在自己的 class 中调用 overideThisMethod 变量并打印 ("Printed from Superclass") .