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()会执行子类的。
展开
1个回答
展开全部
Person 是父类
Student ss = new Student("hanyaquan");
这本身就是在创建子类对象,创造子类对象的时候,首先会调用父类的构造方法,
你可以理解为:没有爸爸,那里来的孩子?
所以首先调用 父类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()
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询