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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucy198921 中级黑马   /  2013-3-24 14:32  /  1984 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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 23:07

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

9 个回复

倒序浏览
public 公共,加上这个修饰的属性和方法,可以在程序的任何其它地方访问
private 私有的,和public相反,加上这个修饰的属性和方法,只允许在自己本身这个类里访问,程序的任何其它地方都不能访问
protected 保护,位于public和private中间,加上这个修饰的属性和方法,只能在子类(extends)和同包下的程序访问,别的的地方不能访问。
还有一个默认缺省的(就是不加任何修饰的)缺省,位于public和protected中间,加上这个修饰的属性和方法,只能在同包下的程序访问,别的的地方不能访问。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
父类Employee中的成员name、id、poy应为是被private定义的,是私有的,子类Manager不能继承,但是子类可以继承父类的构造方法。
回复 使用道具 举报
父类成员private后,子类也不能引用。这是对的。上面你的代码也没有直接引用。而是通过构造函数的形式访问的,子类调用的是父类的构造函数  , super(name,id,pay); 这里也就是从子类中调用父类的构造方法

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
子类不能继承父类的privata的修饰的成员,privata修饰的是私有成员
回复 使用道具 举报
编译可以通过,说明子类可以继承,我在网上查资料得知私有类型的变量可以被继承但是不能访问。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
马利 中级黑马 2013-3-24 15:28:20
7#
能不能继承和能不能访问是两个问题,父类私有的成员是可以被子类继承的,但是子类是不能直接访问父类成员的,当创建一个子类的实例后,子类实例的内存中会自动创建一个super空间,存储的即是父类的成员变量。
上面代码中存在的疑问是为什么父类是私有的变量,但是却貌似子类访问了,
其实子类没有直接访问父类成员变量,子类创建实例的时候,父类的构造函数默认是启动的,父类的构造函数当然可以直接调用自己的任何变量

点评

请不要连续回复哦,谢谢  发表于 2013-3-24 17:56

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
马利 中级黑马 2013-3-24 15:28:27
8#
能不能继承和能不能访问是两个问题,父类私有的成员是可以被子类继承的,但是子类是不能直接访问父类成员的,当创建一个子类的实例后,子类实例的内存中会自动创建一个super空间,存储的即是父类的成员变量。
上面代码中存在的疑问是为什么父类是私有的变量,但是却貌似子类访问了,
其实子类没有直接访问父类成员变量,子类创建实例的时候,父类的构造函数默认是启动的,父类的构造函数当然可以直接调用自己的任何变量
回复 使用道具 举报
顶楼上,我个人也认为子类是可以继承父类的私有成员,但是用的话,必须要调用父类的方法。求讨论
回复 使用道具 举报
你这个问题的核心是把“父类中的私有化成员变量会不会被子类继承” 和 “父类中私有化的成员变量能不能被子类引用” 搞混了
此处,这两个问题之间,也就是说“会不会继承”和“能不能引用”并不存在必然的联系
首先,父类中的成员变量私有化以后,其作用域被限制在了本类里面,其他任何类都不能引用,包括继承它的子类
其次,子类继承父类后,子类在完成某项功能时,其实是父类在调用此功能(也就是对应的父类的构造函数),是继承父类的功能而非继承成员变量

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马