子类为什么能通过继承父类中的setName方法给自己设置父类中被private修饰的name属性?
父类
public abstract class Employee {
private String name;
public String getName(){return name;}
public void setName(String name) {this.name = name;}
public abstract void showMsg();
}
子类
public class Manager extends Employee{
private Clerk clerk;
public Manager(){}
public Manager(Clerk clerk){
this.clerk=clerk;
}
@Override
public void showMsg(){System.out.println(this.getName());
}
}
测试类
下方图片是测试类,可以打印出名字.(请忽略我图片中除了name的其他属性)
下面是我的理解:private不是修饰了name吗?那Manager类中不应该没有name这个属性吗?虽然有setName方法,但是本类中没有name属性,怎么还能给name赋值上的呢?
本人小白,希望有大佬可以指点一下我理解上的错误!
其实你只要理解一句话就很好理解:
子类实例既是子类类型,又是父类类型
这个子类实例没有继承自父类的private属性,这是对的,但是它自己同时又是父类类型呀,所以其实它是有这个属性的,只不过是属于父类类型的,public方法继承自父类类型就不用多说了,它调用这个方法实际上修改的是它属于父类类型这一面的私有属性