java继承的私有属性能不能继承给子类

行走的老熊 2016-04-24 12:05:09

在百度上查,有的说子类继承到了父类的私有变量,只是不能访问直接访问,只能通过get/set方法区访问。

第二种说法是父类的私有属性子类不能继承,父类的私有属性是父类私有的。

请问各位前辈,到底哪种说法是正确的?(刚注册的号,发帖格式什么之类的问题不懂,包涵,谢过...)
...全文
4690 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
这个有点难 2017-10-17
  • 打赏
  • 举报
回复
看Oracle的官方文档 http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html A subclass does not inherit the private members of its parent class. However, if the superclass has public or protected methods for accessing its private fields, these can also be used by the subclass. 说的很明白,子类不能继承父类的私有成员,但可以通过父类的public或protected方法访问。
gx1230123 2017-05-29
  • 打赏
  • 举报
回复
按楼上的意思是不是只有直接访问才算继承,萌新求教
zc_chen 2017-05-15
  • 打赏
  • 举报
回复
画了一个表格,你自己看他们之间的关系。
yqj2065 2017-05-14
  • 打赏
  • 举报
回复
两种说法都可以,不存在对错。
Ckuangf 2017-05-08
  • 打赏
  • 举报
回复
身为一个类的子类,基本上父类有的子类都有(包括私有的)只是虽然被继承过来了但是能不能用就是另外一回事了
瞎闹腾 2017-05-08
  • 打赏
  • 举报
回复
A:子类只能继承父类所有非私有的成员(成员方法和成员变量); B:子类不能继承父类的构造方法,但是可以通过super关键字访问父类的构造方法;
110成成 2017-05-06
  • 打赏
  • 举报
回复
有点钻牛角尖 抠字眼
古琴台何 2017-05-06
  • 打赏
  • 举报
回复
子类是不能继承父类的私有成员变量的
火灵 2017-04-27
  • 打赏
  • 举报
回复
大家都是根据自己的经验来或主观判断来回答的,正确答案是不能继承。其实这在Java语言规范(JLS)中已清晰的说明了,:
Members of a class that are declared private are not inherited by subclasses of that class. Only members of a class that are declared protected or public are inherited by subclasses declared in a package other than the one in which the class is declared.(https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.2)

我觉得问题所在有2点,1是大家对Java"继承(inherit)"的理解不够准确,能通过反射等方法访问到,不等同于就是继承了。
2是区别C++,C++中子类继承父类,子类对象包含了整个父类对象。
MikeDDT009 2017-04-27
  • 打赏
  • 举报
回复
能够继承,只是不能直接访问。 你可以自己建个父类,然后有个私有属性,让一个子类继承它。然后再在main方法里面建立子类的对象,并且使用那个属性。只是你不能直接用.(点)属性来直接用,而必须使用方法来间接调用。 相当于你继承下来以后,那个属性也是私有的。
qq_37185343 2017-04-27
  • 打赏
  • 举报
回复
private是私有的,继承不了的。
小灰狼 2016-04-28
  • 打赏
  • 举报
回复
引用 9 楼 chaser401 的回复:
private的不能被子类继承
乱讲,能继承,但不能直接访问 用反射的话,私有属性和方法都是可以访问的
chaser401 2016-04-28
  • 打赏
  • 举报
回复
private的不能被子类继承
小灰狼 2016-04-28
  • 打赏
  • 举报
回复
第一种说法严谨,并且正确 第二种说法明显是错误的,这个说法的意思就是,子类对象创建后,父类里的私有成员变量就不存在了 子类继承了父类的属性,这一点是肯定的,只是子类不能直接访问罢了(注意是“直接”访问,所以我说第一种说法严谨) 当创建子类对象时,子类构造函数会默认调用一个父类的构造函数,父类的各个属性会被初始化 子类可以通过父类提供的 getter/setter 访问父类属性,否则无法修改或得到父类的私有属性值 如果父类提供了方法去间接修改或读取父类的私有属性,这其实也算是在访问,比如一个计数器: class Counter { private int value = 0; public void print(){ // 打印私有成员变量 System.out.println("value = " + value); } public void add(){ // 修改私有成员变量 value++; } } class MyCounter extends Counter { public void f(){ super.add(); // 间接访问父类的私有成员变量 } } 另外,子类还可以通过反射直接访问父类的属性,这就不多说了
imfang 2016-04-25
  • 打赏
  • 举报
回复
引用 楼主 Javaer_dog 的回复:
在百度上查,有的说子类继承到了父类的私有变量,只是不能访问直接访问,只能通过get/set方法区访问。 第二种说法是父类的私有属性子类不能继承,父类的私有属性是父类私有的。 请问各位前辈,到底哪种说法是正确的?(刚注册的号,发帖格式什么之类的问题不懂,包涵,谢过...)
我支持第一种说法。
qq_27301375 2016-04-24
  • 打赏
  • 举报
回复
定义为private 只能本类去访问包括他的内部类。子类不能继承父类的私有成员,如果子类想取得父类私有成员的值可以通过get/set封住好的方法获取。 所有第二种正确
持衡拥璇 2016-04-24
  • 打赏
  • 举报
回复
当然第二种是正确的说法
nwpucyp 2016-04-24
  • 打赏
  • 举报
回复
private只能在本类中使用。 protected可以由子类使用或者是同一包下其他类使用。 有时候一种常见的做法是将实例域的访问权限设为private,但是将与该实例域相关的get/set方法设为public,用这样的方式保证实例域不会被直接读写。还有一种情况是将get方法设为public,set方法设为private,那么对其他类来说,这个实例域就是只读的了。
行走的老熊 2016-04-24
  • 打赏
  • 举报
回复
引用 2 楼 qq_27184497 的回复:
protected的可以被子类继承, private的不行,只能在本类中使用
多谢你的帮助
行走的老熊 2016-04-24
  • 打赏
  • 举报
回复
引用 1 楼 qq_27301375 的回复:
定义为private 只能本类去访问包括他的内部类。子类不能继承父类的私有成员,如果子类想取得父类私有成员的值可以通过get/set封住好的方法获取。 所有第二种正确
谢谢你......
加载更多回复(1)

62,614

社区成员

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

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