试图理解java中的类继承

时间:2018-05-14 22:56:24

标签: java superclass subclassing

让我说我有超级

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

我有一个像这样的子类,

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

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

2 个答案:

答案 0 :(得分:4)

扩展(也称为继承)不会修改超类,但实际上会创建一个带有您定义的扩展名的新版本,就像覆盖那里一样。

因此,两个类都存在,每个类都有自己的逻辑。

在这里,您正在创建一个名为SuperSub的类,它打印"从Superclass"打印。然后你用它作为基础来创建另一个类SubClass2,其中"掩盖" (a.k.a.覆盖)基本行为,在这种情况下,通过从子类2"打印"代替。

这样,如果您创建类 SuperSub 的对象,它仍将表现为 SuperSub 。 分别如果你创建了一个类 SubClass2 的对象,它的行为就像 SuperSub 一样,带有"扩展"你在 SubClass2 中定义(在这种情况下是被覆盖的行为)。

答案 1 :(得分:2)

对于您的示例,SubClass2类扩展SuperSub,这意味着实例SuperSub2调用的所有方法在功能上与实例{{1}调用的方法相同除了你被覆盖的那些之外。

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

对于两个类中都存在的方法,在您的情况SubClass2中,将根据您的变量的类型调用相应的方法。对于变量overideThisMethod,它是类subClass2的实例,因此它调用其各自的方法(并打印"来自子类2和#34;)。变量SubClass2superSub类的一个实例,因此它在自己的类中调用SuperSub变量并打印("从Superclass&#34打印)。