日期:2014-05-20  浏览次数:20757 次

大家帮忙看一个继承的问题
看了马士兵的视频讲座,说:父类的私有成员也会被继承,即使是private,但不能去访问。对私有成员有所有权,但没有使用权。
我写了一个类,
class Test{
  private int x=10; 
 
}
public class TestPrivate extends Test{
  int x=100;
  public static void main(String[] args){
  TestPrivate tp = new TestPrivate();
  System.out.println(tp.x);
   
  }
}

这样TestPrivate 继承了Test,也继承了私有成员变量 x,但是没有访问它。
如果按马士兵说的,TestPrivate 已经有了一个私有成员变量x,我又定义了一个x,应该会提示重复的变量名,但是现在编译是正确的?难道我理解的有问题?

------解决方案--------------------
你可以理解你在TestPrivate中定义的x覆盖了Test中的x。

子类写的方法也可以覆盖掉父类的方法。
------解决方案--------------------
探讨
其实我想问私有成员在继承时: 子类是根本没有继承父类的私有成员,还是继承了不能访问但可以重写?

------解决方案--------------------
父类没有提供get方法,不能访问private成员,当你设置为public的是时候,你使用的是你当前的成员变量


,当你把你当前类里的成员变量注释后,你在打印,就是父类的
------解决方案--------------------
可以试试把int x=100;删掉,然后把private 改成protected 或 public 子类就能访问。

其实可以这么理解,在子类里面有个黑盒,里面装的是父类的东西,然后有一部分能看到,有一部分不能看到。

私有的其实就是那部分不能看到的部分,也就是没有使用权。
------解决方案--------------------
引:“父类的私有成员也会被继承,即使是private,但不能去访问。对私有成员有所有权,但没有使用权。”
既然不能访问,不能使用,何来会覆盖呢