809
社区成员
发帖
与我相关
我的任务
分享这段代码的运行结果是,我不是很清楚sub:100这个结果程序是怎么输出的
base:100
sub:100
base:70
public class Test {
public static void main(String[] args) {
Base b1 = new Base();
Base b2 = new Sub();
}
}
class Base {
Base() {
method(100);
}
public void method(int i) {
System.out.println("base : " + i);
}
}
class Sub extends Base {
Sub() {
super.method(70);
}
public void method(int j) {
System.out.println("sub : " + j);
}
}
在Java中,当创建一个子类的实例时,会首先调用父类的构造器,然后再调用子类的构造器。如果在父类构造器中调用了一个方法,这个方法在子类中被重写,那么即使是在父类的构造过程中,调用的也会是子类中重写的那个方法版本。这是因为Java的动态绑定机制,即方法的调用是基于运行时对象的实际类型,而不是引用变量的类型。
在你的代码中,Base类的构造器调用了method方法,而这个方法在Sub类中被重写了。因此,当你创建Sub类的实例时,尽管是在Base类的构造过程中调用method方法,实际上调用的是Sub类中重写的method方法。
GZ误我道心,子类调用方法,调用子类的。