黑马程序员技术交流社区

标题: 关于父类和子类继承的疑问 [打印本页]

作者: lucy198921    时间: 2013-3-24 14:32
标题: 关于父类和子类继承的疑问
本帖最后由 lucy198921 于 2013-3-24 23:18 编辑

看毕老师的一段代码:


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 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");
        }
}

class Pro extends Employee
{
        Pro(String name,String id,double pay)
        {
                super(name,id,pay);
        }
        public void work()
        {
                System.out.println("pro work");
        }
}


父类Employee中的私有成员name、id、poy可以给子类Manager继承吗?


之前看毕老师的视频听到父类成员private后,子类也不能引用。


作者: 谷文仁    时间: 2013-3-24 14:58
public 公共,加上这个修饰的属性和方法,可以在程序的任何其它地方访问
private 私有的,和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,程序的任何其它地方都不能访问
protected 保护,位于public和private中间,加上这个修饰的属性和方法,只能在子类(extends)和同包下的程序访问,别的的地方不能访问。
还有一个默认缺省的(就是不加任何修饰的)缺省,位于public和protected中间,加上这个修饰的属性和方法,只能在同包下的程序访问,别的的地方不能访问。
作者: 邹铭钰    时间: 2013-3-24 15:03
父类Employee中的成员name、id、poy应为是被private定义的,是私有的,子类Manager不能继承,但是子类可以继承父类的构造方法。
作者: 炉海佳    时间: 2013-3-24 15:05
父类成员private后,子类也不能引用。这是对的。上面你的代码也没有直接引用。而是通过构造函数的形式访问的,子类调用的是父类的构造函数  , super(name,id,pay); 这里也就是从子类中调用父类的构造方法
作者: 胡志超    时间: 2013-3-24 15:09
子类不能继承父类的privata的修饰的成员,privata修饰的是私有成员
作者: 陆旭东    时间: 2013-3-24 15:09
编译可以通过,说明子类可以继承,我在网上查资料得知私有类型的变量可以被继承但是不能访问。
作者: 马利    时间: 2013-3-24 15:28
能不能继承和能不能访问是两个问题,父类私有的成员是可以被子类继承的,但是子类是不能直接访问父类成员的,当创建一个子类的实例后,子类实例的内存中会自动创建一个super空间,存储的即是父类的成员变量。
上面代码中存在的疑问是为什么父类是私有的变量,但是却貌似子类访问了,
其实子类没有直接访问父类成员变量,子类创建实例的时候,父类的构造函数默认是启动的,父类的构造函数当然可以直接调用自己的任何变量
作者: 马利    时间: 2013-3-24 15:28
能不能继承和能不能访问是两个问题,父类私有的成员是可以被子类继承的,但是子类是不能直接访问父类成员的,当创建一个子类的实例后,子类实例的内存中会自动创建一个super空间,存储的即是父类的成员变量。
上面代码中存在的疑问是为什么父类是私有的变量,但是却貌似子类访问了,
其实子类没有直接访问父类成员变量,子类创建实例的时候,父类的构造函数默认是启动的,父类的构造函数当然可以直接调用自己的任何变量
作者: 黑马朱超    时间: 2013-3-24 16:27
顶楼上,我个人也认为子类是可以继承父类的私有成员,但是用的话,必须要调用父类的方法。求讨论
作者: 夏凡    时间: 2013-3-24 18:09
你这个问题的核心是把“父类中的私有化成员变量会不会被子类继承” 和 “父类中私有化的成员变量能不能被子类引用” 搞混了
此处,这两个问题之间,也就是说“会不会继承”和“能不能引用”并不存在必然的联系
首先,父类中的成员变量私有化以后,其作用域被限制在了本类里面,其他任何类都不能引用,包括继承它的子类
其次,子类继承父类后,子类在完成某项功能时,其实是父类在调用此功能(也就是对应的父类的构造函数),是继承父类的功能而非继承成员变量





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2