黑马程序员技术交流社区
标题:
关于继承的小问题
[打印本页]
作者:
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