流琦
2016-10-16 15:56
采纳率: 50%
浏览 3.6k
已采纳

java中有关private继承的菜鸟问题

比如下列代码:

class Person
{
private String name;

Person(String name)
{
    this.name = name;
}

}

class Student extends Person
{

Student(String name)
{
super(name);
}
}

不是说子类没有办法继承private成员吗?但是子类却可以构造初始化成功,那么子类是不是存在着name这个成员呢?有的话又存放在内存的哪里?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

11条回答 默认 最新

  • Xth8013 2016-10-16 17:58
    已采纳

    子类继承父类的一切属性和方法,但是子类中不能直接访问父类的private修饰的成员,因为private修饰成员只能在定义它的类中访问,不能在另一个类中访问。可以理解为子类隐式地继承了private修饰的成员。
    当创建了一个子类对象时,在内存中开辟存储空间,这个子类对象中包含了继承过来的所有属性,是实际存在的。只是由于修饰符private的限制而不能在父类外部访问。

    已采纳该答案
    评论
    解决 2 无用
    打赏 举报
  • devmiao 2016-10-16 15:55

    不可以访问,但是是继承的。

    评论
    解决 无用
    打赏 举报
  • 当作看不见 2016-10-16 16:05

    首先子类继承父类必须要调用父类的构造方法,但是不代表父类的私有成员可以被子类继承,这里调用构造方法,看似对父类的私有成员赋值(子类对父类私有成员产生影响),但实际上什么都没有发生。

    评论
    解决 无用
    打赏 举报
  • 一个睿智的人 2016-10-16 16:21

    对于父类私有的这个成员变量是否被继承,这个底层其实是子类继承了父类的私有属性的,只是被私有化,不能直接方法,得对外提供public的get set方法访问,当然了内存中实例化了子类,其实也是先去访问父类中的成员的。

    评论
    解决 无用
    打赏 举报
  • android_0327 2016-10-16 18:34

    这个就是形参与实参的问题了,看似两个name是一样的,但实际上只是名称一样,赋值完全不一样,如果父类name=“张曼玉”,父类构造方法name也是张曼玉,但是子类继承父类构造方法,这里的name你可以随便写,只要是字符串就行,张曼玉只存在父类之中,若想子类拥有张曼玉只能重新赋值

    评论
    解决 无用
    打赏 举报
  • Compostela 2016-10-17 01:16

    子类只调用从父类继承来的成员方法,并没有直接访问父类的私有成员变量。
    访问父类私有成员是这个方法的事,与子类无关

    评论
    解决 无用
    打赏 举报
  • fh258103068 2016-10-17 01:37

    如果一个子类继承了父类,那么这个子类拥有父类所有的成员属性和方法,即使是父类里有private属性的变量,子类也是继承的,只不过不能使用,也就是说,它继承了,但是没有使用权,似乎又点矛盾,用我们通俗的说法就是 只能看,不能用,!
    虽然是这样,但是,还是可以通过set 和get的方法来间接的访问父类中的private属性的变量!

    评论
    解决 无用
    打赏 举报
  • qq_23153607 2016-10-17 01:40

    你好,很高兴回答你的问题,首先我想说的是:子类不存在父类的name这个成员,子类只是继承了父类的构造方法而已.其实最简单的方法是你在eclipse打一遍,选中name,你就看明白了

    评论
    解决 无用
    打赏 举报
  • 子类可以继承父类成员,但不可以直接调用private成员员。其实子类是父类的扩展,含有父类中所有的成员。

    评论
    解决 无用
    打赏 举报
  • liang_shui_guo 2016-10-17 03:16

    前面好像说什么的都有,我赞同认为子类含有父类中所有的属性或方法,但是子类不能直接访问父类的私有属性和方法,只能通过父类给出的public方法调用。

    评论
    解决 无用
    打赏 举报
  • 上天肖 2016-10-17 06:48

    私有成员也是可以继承的,和公有成员区别只在于能否通过引用方式调用,所以子类存在name这个成员的,由于是成员变量,所以存放在堆内存中

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题