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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© danielzyj 中级黑马   /  2014-3-26 19:09  /  1022 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 danielzyj 于 2014-3-27 08:35 编辑

子类在继承父类时,子类不能直接操作父类中private修饰的变量,但还会给这些变量分配内存空间,就这样来说,子类是继承了父类的private变量,还是没有继承?如果没有继承,为什么还会分配内存空间?

评分

参与人数 1技术分 +1 收起 理由
ily521125 + 1

查看全部评分

4 个回复

倒序浏览
本帖最后由 awkflf11 于 2014-3-26 19:55 编辑

子类在继承父类时,子类不能直接操作父类中private修饰的变量,
但还会给这些变量分配内存空间,
子类不能直接访问被private修饰的父类的变量;

但,你别忘了,,,父类中还有一个public方法,    子类可以通过这个方法来间接

的访问父类的成员。。。


所以仍需要分配空间。。。

例如:
class Fu
{
        private int num = 4
        public int getNum()
        {
                return this.num;
        }
}
class Zi extends Fu
{
        private int num = 6;//  
        int num=6
        void show()
        {
       
                System.out.println("num="+super.getNum());

        }
}

回复 使用道具 举报
因为这些private变量对于父类来说是必须的,但对于子类来说是非必要的,所以用private修饰,防止子类误操作
回复 使用道具 举报
一个子类只能继承其父类的非私有成员。但是在父类中私有成员仍然是子类对象的一部分。因为在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。所以,说:子类不能继承父类的私有成员,但是子类的对象是包括父类中的私有成员。
回复 使用道具 举报
子类肯定要在堆中分配空间,只是有访问权限。但是并不意味着子类就用不到这些变量。可能会间接用到,例如初始化的时候。
class fu
{
        private String name;
        fu(String name,int age)
        {
                this.name=name;
        }
}
class zi extends fu
{
        zi(String name,int age)
        {
                super(name,age);

        }
}
class  lianxi
{
        public static void main(String[] args)
        {
                zi z = new zi("lisi",20);                 
        }
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马