A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© RINGARES 中级黑马   /  2014-11-6 14:39  /  1941 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 RINGARES 于 2014-11-7 22:37 编辑

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

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

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

评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

14 个回复

正序浏览
这个问题挺好的,后面补答案
回复 使用道具 举报
曾提问过,也没得到个标准答案
回复 使用道具 举报
只能继承非私有属性和方法:)
回复 使用道具 举报
nyk 中级黑马 2014-11-7 12:24:06
12#
本帖最后由 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修饰的成员变量和方法
回复 使用道具 举报
被private修饰表示私有化,父类私有不能被子类继承,不能被外部直接访问,只能通过内部其他方法间接调用。
目的就是封装这个成员变量或方法,不能让外部修改这个方法,提高了对数据访问的安全性。
回复 使用道具 举报
父类被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. }
复制代码
回复 使用道具 举报
权限只是一种修饰符吧!底层在进行编译时,会根据这些修饰符做出相应的判断。
回复 使用道具 举报
本帖最后由 cs8630323 于 2014-11-7 02:20 编辑
戏言丶 发表于 2014-11-7 00:56
应该是没有继承,如果继承了那么说明子类也应该具有同样的自己的字段,可是定义一个方法去访问的时候会报出 ...

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


回复 使用道具 举报
应该是没有继承,如果继承了那么说明子类也应该具有同样的自己的字段,可是定义一个方法去访问的时候会报出没有定义
回复 使用道具 举报
当然不能啦!!!!
回复 使用道具 举报
貌似不能继承!
回复 使用道具 举报
私有成员不能被直接继承,但可以隐式访问\隐式继承。比如父类的public权限的方法中访问了private成员变量,子类继承方法便访问了父类的private成员变量。不是大神,讲得不够清楚。你记住隐式继承这个词就行了。有更好的答案,记得及时回复一下。
回复 使用道具 举报
请教一下,不能继承和没有权限有什么区别?
回复 使用道具 举报
父类中private修饰的成员是不能被继承的,除了本类内可以直接访问,其它地方需要通过该类提供的公共方法访问
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马