黑马程序员技术交流社区
标题:
Java继承中父类的私有成员变量的理解
[打印本页]
作者:
萧刹520
时间:
2015-10-27 19:59
标题:
Java继承中父类的私有成员变量的理解
今天看了教程中的一题,发现一个问题
/*
假如我们在开发一个系统时需要对员工进行建模,员工包含 3 个属性:
姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个
奖金属性。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方
法进行属性访问。
*/
class Employee
{
private String name;
private String id;
private double pay;
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work();
}
class Manager extends Employee
{
private int bonus;
Manager(String name,String id,double pay,int bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
//System.out.println("manager work");
System.out.println(this.name);
/*
问题:
在子类方法中执行System.out.println(this.name);
发现编译失败,在网上找了很久才理解,现在拿出来分享一下:
解决:
创建Manager对象时,调用了Manager()构造函数,这时先执行super(name,id,pay);,
即执行了父类的构造函数,接收传递进去的前三个实际参数,(因此在子类中可以不用定义这三个变量)
再执行this.bonus = bonus;接收第四个实际参数(子类特有的要在子类中定义)。
程序执行到:System.out.println(this.name),在子类中便找不到这个变量,
因为它是父类的私有成员变量,没有被子类继承。
想有调用它,那么在定义父类变量name时,就不能用private修饰,
可以根据实际情况用public、protected或什么也不写。
*/
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2