黑马程序员技术交流社区

标题: 关于继承的小问题 [打印本页]

作者: danielzyj    时间: 2014-3-26 19:09
标题: 关于继承的小问题
本帖最后由 danielzyj 于 2014-3-27 08:35 编辑

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

作者: awkflf11    时间: 2014-3-26 19:50
本帖最后由 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());

        }
}


作者: yanzhendong    时间: 2014-3-26 19:59
因为这些private变量对于父类来说是必须的,但对于子类来说是非必要的,所以用private修饰,防止子类误操作
作者: Mr.__ㄨīn    时间: 2014-3-26 22:04
一个子类只能继承其父类的非私有成员。但是在父类中私有成员仍然是子类对象的一部分。因为在实例化的过程中,JVM 需要为对象的类及其父类中所有定义的属性分配空间,包括父类中声明的私有成员。所以,说:子类不能继承父类的私有成员,但是子类的对象是包括父类中的私有成员。
作者: 谭荣强    时间: 2014-3-26 22:33
子类肯定要在堆中分配空间,只是有访问权限。但是并不意味着子类就用不到这些变量。可能会间接用到,例如初始化的时候。
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);                 
        }
}




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