简单java抽象与继承的问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 05:44:07
public abstract class A {
A() {
method();
}
protected abstract void method();
}

class B extends A {
@Override
protected void method() {
System.out.println("success!");
}
public static void main(String[] args) {
new B();
}
}
此程序可以正常运行打印输出 success!

据我所知,构造一个对象的过程是先构造它的基类对象,在

此基础之上再构造本体对象。但A在构造方法中调用了抽象方

法method,此时B类还没有开始构造,为什么竟然可以正确

调用method?如果有多个子类实现method,JVM是如何知

道该调用哪一个method?
也就是说,这种调用的底层机理是什么呢?求高手解释

注:不要说是“在B类构造方法调用A类构造方法时就已经把

子类信息向上传递,然后调用方法的时间有所延迟”,这种

解释我自己也能想出来。

楼主钻牛角尖了.
首先,抽象类不能被实例化.也就是说"据我所知,构造一个对象的过程是先构造它的基类对象,在此基础之上再构造本体对象。"本身就错了.
其次,子类在在继承抽象类的时候,必须重写父类的抽象方法.
所以:子类在实例的时候,只是调用了父类的构造函数,而构造函数中,又调用了其重写后的method();方法.