java 为什么一个抽象类构造方法中可以调用未实例化的子类的方法 5

publicabstractclassPerson{Person(Stringname){System.out.println("父类构造函数--"+name);test... public abstract class Person { Person(String name) { System.out.println("父类构造函数--" + name); test(); } abstract void test();}public class Student extends Person { Student(String name) { super(name); System.out.println("子类构造方法执行结束"); } @Override void test() { System.out.println("子类test方法"); } public static void main(String[] args) { Student ss = new Student("hanyaquan"); System.out.println("子类执行完毕"); }}为什么实例化Person 类的时候,test()会执行子类的。 展开
 我来答
我叫辰先森
2018-01-12 · 超过16用户采纳过TA的回答
知道答主
回答量:42
采纳率:0%
帮助的人:9.8万
展开全部
Person 是父类
Student ss = new Student("hanyaquan");
这本身就是在创建子类对象,创造子类对象的时候,首先会调用父类的构造方法,
你可以理解为:没有爸爸,那里来的孩子?
所以首先调用 父类Person 的构造方法,然后才会执行子类的构造方法。
追问
您好,为什么父类构造器中test方法会执行,而且执行的是子类的test方法
追答
这事面向对象中的  多态。
Student ss = new Student("hanyaquan");
test() 是方法,是函数,同时只有行为才能被定义成方法。
父类引用指向子类对象。
比如:有一个人想求你办test()的事,而这个人不认识你new Student("hanyaquan"),他认识你爸Student ss ,但是你爸test()又不能办这个人的事。所以这个人就通过Student ss(你爸)找到了你 new Student("hanyaquan");。然后就相当于,你爸让你做这个事,你还得听,所以调用的是 子类的 test()
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式