如上图代码所示,子类Student继承了父类Human,同时重写了父类中的f()方法。在测试类中创建了Student对象,应该先执行的是父类的构造方法,然后在执行子类的构造方法,但是执行父类构造方法的时候,为什么调用的是子类的f()方法。
然后把f()方法的public改成private的话,又是另一种结果。
这一块内容有点不是很能理解,希望又大佬能帮忙解答一下。
如上图代码所示,子类Student继承了父类Human,同时重写了父类中的f()方法。在测试类中创建了Student对象,应该先执行的是父类的构造方法,然后在执行子类的构造方法,但是执行父类构造方法的时候,为什么调用的是子类的f()方法。
然后把f()方法的public改成private的话,又是另一种结果。
这一块内容有点不是很能理解,希望又大佬能帮忙解答一下。
执行顺序是先父类构造函数,再子类构造函数
执行父类的构造函数时,由于方法f已经被重写了,子类父类的方法f可以视为同个方法,所以调用子类的
关键词改成private,这时方法变为私有,子类父类的方法f为两个不同的方法只是名字一样
改成private可以理解为下面这种方式
class Human {
public Human() {
parentPrint()
}
public void parentPrint() {
System.out.println("Human....")
}
}
class Student extends Human {
public Student(){
childPrint()
}
public void childPrint() {
System.out.println("Student....")
}
}