版权声明:欢迎转载,期待指正 https://blog.csdn.net/fighting_sxw/article/details/89185703
public class TestSub {
private String a="父类的属性值";
public TestSub() {
call();
}
public void call(){
System.out.println("父类的call方法被调用"+a);
}
static class TestSup extends TestSub{
private String a ="子类的属性";
public void call(){
System.out.println(a);
}
}
public static void main(String[] args) {
TestSub ts=new TestSup();
}
}
输出结果:null
TestSub ts=new TestSup(); 向上转型,父类引用指向子类对象
会先调用父类的构造器,再调用子类的构造器
创建子类对象时,先调用父类构造方法,在父类构造方法中,调用了call方法
call方法被子类重写了,所以不会调用父类的call方法,而是调用子类的call方法,
子类的call方法中打印的是子类的属性a,但是此时还没有调用子类的构造器,所以子类对象还没被创造,所以子类的属性a还没有被赋值,
所以打印结果为null
ps:从大佬的抖音直接搬运过来,抖音号:Todaystart,不妥之处,还望指正!