简单java抽象与继承的问题

publicabstractclassA{A(){method();}protectedabstractvoidmethod();}classBextendsA{@Ove... 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类构造方法时就已经把

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

解释我自己也能想出来。
展开
 我来答
帅留卜长根户22
2009-01-24 · TA获得超过303个赞
知道小有建树答主
回答量:469
采纳率:0%
帮助的人:287万
展开全部
楼主钻牛角尖了.
首先,抽象类不能被实例化.也就是说"据我所知,构造一个对象的过程是先构造它的基类对象,在此基础之上再构造本体对象。"本身就错了.
其次,子类在在继承抽象类的时候,必须重写父类的抽象方法.
所以:子类在实例的时候,只是调用了父类的构造函数,而构造函数中,又调用了其重写后的method();方法.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式