黑马程序员技术交流社区

标题: 父类成员为private,子类继承到了吗? [打印本页]

作者: 高鑫    时间: 2012-5-5 20:38
标题: 父类成员为private,子类继承到了吗?
  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,子类继承到了吗?我理解的是子类继承到了,但是因为私有不能直接访问,是这个意思吗?

作者: 谭景宾    时间: 2012-5-5 20:43
继承不到,private只有在当前类有效。
作者: 徐慧书    时间: 2012-5-5 20:45
既然都是private 了只有父类内部才能使用, 子类是无法调用的!
作者: 云惟桉    时间: 2012-5-5 20:49
http://blog.csdn.net/xinglongbing/article/details/2911568
楼主可以看看以上博客分析,我觉得蛮有道理的,虽然篇幅不大,但是容易理解。

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

希望能帮到你。
作者: xiwangliujiao    时间: 2012-5-5 20:50
没有继承到,父类的私有成员只有在自己类中可以访问,对外界是不可见的,包括子类,所以没有继承到
作者: 任睦强    时间: 2012-5-5 21:11
继承不到,private只有本类能使用,如果想让子类使用,把私有属性写到父类构造方法中,子类就可以使用了。
作者: 隋营营    时间: 2012-5-5 22:26
标题: 让我的技术分突破个位数吧!
本帖最后由 隋营营 于 2012-5-6 06:15 编辑

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


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

内存分配图解

内存分配图解

作者: —__    时间: 2012-5-6 03:19
英雄所见略同~我写同楼上能给我1分技术分吗{:soso_e105:}

作者: 黑马-王建雨    时间: 2012-5-6 07:43
被private修饰的成员变量只能被本类方法访问。不能被子类直接访问。
作者: 崔仁军    时间: 2012-5-6 10:35
1    首先要明白各自访问修饰符的用法   
   a  public   (公共的):被public 所修饰的属性和方法可以被所有类访问。
   b  protected (受保护的):被protected 所修饰的属性和方法可以在类内部、相同包以及该类的子类所访问。
   c  private  (私有的):被private 所修饰的属性和方法只能在该类内部使用
   d  默认的(不加任何访问修饰符):在类内部以及相同包下面的类所使用。
2  所以说父类private 成员是不能被继承的
作者: 钟成军    时间: 2012-5-6 11:41
通过父类中的方法可以间接的访问到私有变量。如果父类中没有这个方法,那么子类就不能访问到了。
作者: 雷云红    时间: 2012-5-6 12:35

应该继承了,但是继承也没用啊。因为PRIVATE修饰的成员智能本类内部可用,对其他类是不可见的。所以楼主就不要纠缠继承和private的。private视为保护类的封装性,而继承则打破了封装。所以两个出生就有矛盾




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