大家帮忙看一个继承的问题

hellokitty1908 2010-08-19 05:50:39
看了马士兵的视频讲座,说:父类的私有成员也会被继承,即使是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,应该会提示重复的变量名,但是现在编译是正确的?难道我理解的有问题?
...全文
353 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
EngineZhang 2010-09-07
  • 打赏
  • 举报
回复
[Quote=引用 39 楼 qq378166396 的回复:]
引用 38 楼 xq1988916 的回复:
楼主把父类的x变量变成public,子类里面的x一样的不会出现编译错误的,打印也是打印子类的变量x


这个很对,Java允许父类和子类有同名属性,且不存在覆写成员变量,二者内存地址不一样
[/Quote]
+1
fcukhpwywang 2010-09-07
  • 打赏
  • 举报
回复
学习下
xq1988916 2010-09-06
  • 打赏
  • 举报
回复
楼主把父类的x变量变成public,子类里面的x一样的不会出现编译错误的,打印也是打印子类的变量x
xiaobaomeng 2010-09-06
  • 打赏
  • 举报
回复
引:“父类的私有成员也会被继承,即使是private,但不能去访问。对私有成员有所有权,但没有使用权。”
既然不能访问,不能使用,何来会覆盖呢
无聊司马 2010-09-06
  • 打赏
  • 举报
回复
各位讨论的都是些有水平的问题 不要在这里费时间了
zxcv991 2010-09-06
  • 打赏
  • 举报
回复
路过看看
qq378166396 2010-09-06
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 xq1988916 的回复:]
楼主把父类的x变量变成public,子类里面的x一样的不会出现编译错误的,打印也是打印子类的变量x
[/Quote]

这个很对,Java允许父类和子类有同名属性,且不存在覆写成员变量,二者内存地址不一样
cry615 2010-09-05
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hellokitty1908 的回复:]
其实我想问私有成员在继承时: 子类是根本没有继承父类的私有成员,还是继承了不能访问但可以重写?
[/Quote]
子类可以继承父类的私有变量,得是在父类的方法内吧
mm5201234 2010-09-05
  • 打赏
  • 举报
回复
学习了。顶礼膜拜!!
「已注销」 2010-09-03
  • 打赏
  • 举报
回复
这个问题看thinking java 里面有详解
hellokitty1908 2010-09-03
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 yangchao228 的回复:]
楼主,很明显父类中的私有类变量 子类是继承不了的 建议楼主看java编程思想, 看完后对java理解更加透彻
[/Quote]

你看看8楼的说法。
zhoupin 2010-08-25
  • 打赏
  • 举报
回复
学习下
大米随笔 2010-08-25
  • 打赏
  • 举报
回复
如果子类继承了父类的成员变量且又定义一个同名的成员变量,从java语法来说,肯定要报错的,同事java的语法里说private的成员是不能继承的。
langqingsj 2010-08-25
  • 打赏
  • 举报
回复
1)首先这样会编译正确,因为父类中的private成员能被继承但不能被访问,也就是空间还是占的,但被锁住了没法用,子类中的同名的成员变量或方法均可理解为子类自己重新定义的。
2)不存在覆写private成员或方法一说,且不存在覆写成员变量一说。
coooliang 2010-08-25
  • 打赏
  • 举报
回复
+1[Quote=引用 2 楼 keeya0416 的回复:]
java允许父子类中的同名变量
访问的时候是决定于引用的类型
当然本例中的父类用的是private 子类是访问不到的
[/Quote]
ylongshao1987 2010-08-25
  • 打赏
  • 举报
回复
这个有什么好说的啊,父类私有变量肯定是用不了的了,除非父类有变量的get方法。
蒙奇D路飞 2010-08-24
  • 打赏
  • 举报
回复
楼主,很明显父类中的私有类变量 子类是继承不了的 建议楼主看java编程思想, 看完后对java理解更加透彻
大黄梨 2010-08-20
  • 打赏
  • 举报
回复
可以试试把int x=100;删掉,然后把private 改成protected 或 public 子类就能访问。

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

私有的其实就是那部分不能看到的部分,也就是没有使用权。
kondor 2010-08-20
  • 打赏
  • 举报
回复
下面这个例子应该能说明子类继承了父类的私有属性,只是不能直接使用而已
这个例子中,只有子类在调用test方法,如果说子类没有继承父类的私有属性,那test方法如何调用父类的私有成员变量a呢,说明这个a已经被子类继承了

public class Parent {

private String a = "a";
public String b = "b";

public void test(){
System.out.println(a);
}
}

public class Child extends Parent {

public String c = "c";
public String d = "d";

public static void main(String[] args) {
Child child = new Child();
System.out.println(child.b);
child.test();
}
}
dabanphoto 2010-08-20
  • 打赏
  • 举报
回复
父类的虽然继承了,但看不见,也就不是不能访问,所以并不冲突啊。
加载更多回复(22)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧