让我说我有超级
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
非常感谢任何澄清,谢谢!
答案 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;)。变量SubClass2
是superSub
类的一个实例,因此它在自己的类中调用SuperSub
变量并打印("从Superclass&#34打印)。