A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天看了教程中的一题,发现一个问题
/*
假如我们在开发一个系统时需要对员工进行建模,员工包含 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或什么也不写。
*/
       

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马