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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-5-5 20:38  /  4752 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. class Fu
  2. {
  3.         private int num = 3;   
  4.         public void setNum(int num)
  5.         {
  6.                 this.num = num;
  7.         }
  8.         public int getNum()
  9.         {
  10.                 return this.num;
  11.         }
  12. }
  13. class Zi extends Fu
  14. {
  15.         private int num = 5;
  16.        
  17.         public void show()
  18.         {
  19.                 int num = 6;
  20.                 System.out.println("num="+this.num);
  21.                 super.setNum(10);
  22.                 System.out.println("num="+super.getNum());
  23.         }
  24. }

  25. class ExtendsDemo2
  26. {
  27.         public static void main(String[] args)
  28.         {
  29.                 Zi z = new Zi();
  30.                 z.show();
  31.         }
  32. }
复制代码
问题:父类成员为private的成员num,子类继承到了吗?我理解的是子类继承到了,但是因为私有不能直接访问,是这个意思吗?

11 个回复

倒序浏览
继承不到,private只有在当前类有效。
回复 使用道具 举报
既然都是private 了只有父类内部才能使用, 子类是无法调用的!
回复 使用道具 举报
http://blog.csdn.net/xinglongbing/article/details/2911568
楼主可以看看以上博客分析,我觉得蛮有道理的,虽然篇幅不大,但是容易理解。

我个人理解是,父类的私有成员对子类中具有不可见性,不论直接访问或是操作父类的公共成员方法访问。
可以通过get/set方法获得一个类私有成员的访问。
在C++中有友元机制friend,楼主感兴趣的话可以去了解一下。

希望能帮到你。
回复 使用道具 举报
没有继承到,父类的私有成员只有在自己类中可以访问,对外界是不可见的,包括子类,所以没有继承到
回复 使用道具 举报
任睦强 来自手机 高级黑马 2012-5-5 21:11:45
地板
继承不到,private只有本类能使用,如果想让子类使用,把私有属性写到父类构造方法中,子类就可以使用了。
回复 使用道具 举报

让我的技术分突破个位数吧!

本帖最后由 隋营营 于 2012-5-6 06:15 编辑

真是英雄所见略同啊!
表达能力不行,我还是画图说明吧:
显然在物理上(占用内存 私有的类成员已经被继承了只是逻辑上程序员不能访问!
不知理解地对与否?非常感谢提出建议。


2012-05-05_222216.png (12.56 KB, 下载次数: 37)

内存分配图解

内存分配图解

评分

参与人数 2技术分 +2 收起 理由
职业规划-刘倩老师 + 1 满足你一下,继续加油哈!
贠(yun)靖 + 1 突破啦 呵呵

查看全部评分

回复 使用道具 举报
英雄所见略同~我写同楼上能给我1分技术分吗{:soso_e105:}
回复 使用道具 举报
被private修饰的成员变量只能被本类方法访问。不能被子类直接访问。
回复 使用道具 举报
1    首先要明白各自访问修饰符的用法   
   a  public   (公共的):被public 所修饰的属性和方法可以被所有类访问。
   b  protected (受保护的):被protected 所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。
   c  private  (私有的):被private 所修饰的属性和方法只能在该类内部使用
   d  默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。
2  所以说父类private 成员是不能被继承的
回复 使用道具 举报
通过父类中的方法可以间接的访问到私有变量。如果父类中没有这个方法,那么子类就不能访问到了。
回复 使用道具 举报

应该继承了,但是继承也没用啊。因为PRIVATE修饰的成员智能本类内部可用,对其他类是不可见的。所以楼主就不要纠缠继承和private的。private视为保护类的封装性,而继承则打破了封装。所以两个出生就有矛盾
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马