一个继承了抽象父类的子类,new该对象时,在其父类的构造方法中调用了protected修饰的方法,为什么最后调用了子类的protected方法?
问题描述:
抽象的父类
package com.example.wl;
public abstract class FatherTest {
public FatherTest() {
this.sayHello();
}
protected void sayHello(){
System.out.println("father");
}
}
子类
package com.example.wl;
public class SonTest extends FatherTest {
public SonTest() {
}
protected void sayHello(){
System.out.println("SON");
}
}
调用类
package com.example.wl;
public class MainTest {
public static void main(String[] args) {
SonTest sonTest = new SonTest();
}
}
最后的调用结果
答
1.之所有会打印是因为子类继承父类会继承父类的所有方法。
2.之所以打印子类的是因为子类重写了父类的方法,会优先调用子类的。
其实你可以这么想,你有没有用过@override注解重写方法,重写了之后你说程序是调用你的还是调用之前的,肯定是调用你的对吧。
迎刃而解。。
答
SonTest sonTest = new SonTest(); 你这样创建对象不就只能调用子类方法