比如下列代码:
class Person
{
private String name;
Person(String name)
{
this.name = name;
}
}
class Student extends Person
{
Student(String name)
{
super(name);
}
}
不是说子类没有办法继承private成员吗?但是子类却可以构造初始化成功,那么子类是不是存在着name这个成员呢?有的话又存放在内存的哪里?
子类继承父类的一切属性和方法,但是子类中不能直接访问父类的private修饰的成员,因为private修饰成员只能在定义它的类中访问,不能在另一个类中访问。可以理解为子类隐式地继承了private修饰的成员。
当创建了一个子类对象时,在内存中开辟存储空间,这个子类对象中包含了继承过来的所有属性,是实际存在的。只是由于修饰符private的限制而不能在父类外部访问。
不可以访问,但是是继承的。
首先子类继承父类必须要调用父类的构造方法,但是不代表父类的私有成员可以被子类继承,这里调用构造方法,看似对父类的私有成员赋值(子类对父类私有成员产生影响),但实际上什么都没有发生。
对于父类私有的这个成员变量是否被继承,这个底层其实是子类继承了父类的私有属性的,只是被私有化,不能直接方法,得对外提供public的get set方法访问,当然了内存中实例化了子类,其实也是先去访问父类中的成员的。
这个就是形参与实参的问题了,看似两个name是一样的,但实际上只是名称一样,赋值完全不一样,如果父类name=“张曼玉”,父类构造方法name也是张曼玉,但是子类继承父类构造方法,这里的name你可以随便写,只要是字符串就行,张曼玉只存在父类之中,若想子类拥有张曼玉只能重新赋值
子类只调用从父类继承来的成员方法,并没有直接访问父类的私有成员变量。
访问父类私有成员是这个方法的事,与子类无关
如果一个子类继承了父类,那么这个子类拥有父类所有的成员属性和方法,即使是父类里有private属性的变量,子类也是继承的,只不过不能使用,也就是说,它继承了,但是没有使用权,似乎又点矛盾,用我们通俗的说法就是 只能看,不能用,!
虽然是这样,但是,还是可以通过set 和get的方法来间接的访问父类中的private属性的变量!
你好,很高兴回答你的问题,首先我想说的是:子类不存在父类的name这个成员,子类只是继承了父类的构造方法而已.其实最简单的方法是你在eclipse打一遍,选中name,你就看明白了
子类可以继承父类成员,但不可以直接调用private成员员。其实子类是父类的扩展,含有父类中所有的成员。
前面好像说什么的都有,我赞同认为子类含有父类中所有的属性或方法,但是子类不能直接访问父类的私有属性和方法,只能通过父类给出的public方法调用。
私有成员也是可以继承的,和公有成员区别只在于能否通过引用方式调用,所以子类存在name这个成员的,由于是成员变量,所以存放在堆内存中