黑马程序员技术交流社区

标题: private 成员的继承 [打印本页]

作者: RINGARES    时间: 2014-11-6 14:39
标题: private 成员的继承
本帖最后由 RINGARES 于 2014-11-7 22:37 编辑

父类中含有private的成员变量及方法
子类继承父类后是无法直接调用父类的private成员的,只能通过父类提供的public方法调用

提问:
此时父类中的private成员有没有被继承?是无法继承还是只是权限不够无法触及?

百度很多答案都说是无法继承,但我觉得是可以继承的只是权限问题而已,提出这个问题,希望找到确切的答案!~


作者: 一叶障目    时间: 2014-11-6 15:21
父类中private修饰的成员是不能被继承的,除了本类内可以直接访问,其它地方需要通过该类提供的公共方法访问
作者: chen578157939    时间: 2014-11-6 15:29
请教一下,不能继承和没有权限有什么区别?
作者: shileishihai    时间: 2014-11-6 19:02
私有成员不能被直接继承,但可以隐式访问\隐式继承。比如父类的public权限的方法中访问了private成员变量,子类继承方法便访问了父类的private成员变量。不是大神,讲得不够清楚。你记住隐式继承这个词就行了。有更好的答案,记得及时回复一下。
作者: w239983684    时间: 2014-11-6 20:16
貌似不能继承!
作者: 焦旭宁1    时间: 2014-11-6 22:52
当然不能啦!!!!
作者: 戏言丶    时间: 2014-11-7 00:56
应该是没有继承,如果继承了那么说明子类也应该具有同样的自己的字段,可是定义一个方法去访问的时候会报出没有定义
作者: cs8630323    时间: 2014-11-7 02:15
本帖最后由 cs8630323 于 2014-11-7 02:20 编辑
戏言丶 发表于 2014-11-7 00:56
应该是没有继承,如果继承了那么说明子类也应该具有同样的自己的字段,可是定义一个方法去访问的时候会报出 ...

继承了{:3_50:}
用子类调用父类私有域看看报什么错顺便说下静态的也能继承



作者: zhangyangLengen    时间: 2014-11-7 07:23
权限只是一种修饰符吧!底层在进行编译时,会根据这些修饰符做出相应的判断。
作者: Se7en_Liu    时间: 2014-11-7 09:24
父类被private修饰的成员变量不能被子类继承,成员方法不能被重写,只能通过提供公共权限的访问方式,一般情况写私有成员变量是通过构造函数来初始化的
  1. class Demo
  2. {
  3.         private int num;
  4.        
  5.         //给成员变量初始化
  6.         Demo(int num){
  7.                 this.num = num;
  8.         }

  9.         //通过getNum获取num的初始化后的值
  10.         public int getNum(){
  11.                 return num;
  12.         }

  13. }
  14. class Test extends Demo
  15. {
  16.         Test(int num){
  17.                 super(num);
  18.         }

  19. }

  20. class  
  21. {
  22.         public static void main(String[] args)
  23.         {
  24.                 Test t = new Test(3);//子类创建对象时,会默认先访问父类的构造方法

  25.                 System.out.println(s.getNum());//子类继承了getNum,直接通过对象调用
  26.         }
  27. }
复制代码

作者: 田峻菘    时间: 2014-11-7 09:57
被private修饰表示私有化,父类私有不能被子类继承,不能被外部直接访问,只能通过内部其他方法间接调用。
目的就是封装这个成员变量或方法,不能让外部修改这个方法,提高了对数据访问的安全性。
作者: nyk    时间: 2014-11-7 12:24
本帖最后由 nyk 于 2014-11-7 12:25 编辑

调用父类中的private修饰的变量,抛出以下异常、Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        The field TestSuper.str is not visible

visible意为不可见,我觉得是子类继承了父类的所有成员变量和方法,子类没有权限访问被private修饰的成员变量和方法

作者: 代码学者    时间: 2014-11-7 13:15
只能继承非私有属性和方法:)
作者: HelloWorld!    时间: 2014-11-7 15:41
曾提问过,也没得到个标准答案
作者: MarcoLee    时间: 2014-11-7 21:07
这个问题挺好的,后面补答案




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2