黑马程序员技术交流社区

标题: 关于继承与私有private问题 [打印本页]

作者: 史政法    时间: 2013-3-25 18:17
标题: 关于继承与私有private问题
本帖最后由 史政法 于 2013-3-26 10:35 编辑

父类中的成员没有被私有,子类继承父类,子类中是什么情况?

父类中的成员被私有后,子类继承父类,子类中是什么情况?
  1. class  Demo
  2. {
  3.         public static void sop(Object obj)
  4.         {
  5.                 System.out.println(obj);
  6.         }


  7.         public static void main(String[] args)
  8.         {
  9.                 Zi z = new Zi();
  10.                 sop(z.getName());
  11.         }
  12. }

  13. class Fu
  14. {
  15.         private String name = "zhangsan";
  16.         String getName()
  17.         {
  18.                 return this.name;
  19.         }


  20. }
  21. class Zi extends Fu
  22. {
  23.         String getName()
  24.         {
  25.                 return name;
  26.         }
  27. }
复制代码
上面代码,另我疑惑的是:如果子类覆盖了父类中的获取方法,编译就会报错:第44行:name可以在Fu中访问private,return this.name
但是如果子类不覆盖父类中的获取方法,就可以直接获取到父类中私有的成员变量,什么情况?内存中是什么样的?
作者: 胡志超    时间: 2013-3-25 18:21
父类中的成员没有被私有,子类继承父类,子类继承了父类中的公共成员、保护成员(除了私有成员外)

父类中的成员被私有后,子类继承父类,但是并没有继承父类中的私有成员
作者: 史政法    时间: 2013-3-25 18:28
本帖最后由 史政法 于 2013-3-25 18:53 编辑
胡志超 发表于 2013-3-25 18:21
父类中的成员没有被私有,子类继承父类,子类继承了父类中的公共成员、保护成员(除了私有成员外)

父类中 ...

代码改过来了
作者: 胡志超    时间: 2013-3-25 18:31
史政法 发表于 2013-3-25 18:28
class  Demo
{
        public static void sop(Object obj)

你这里的属性,并不是私有成员,字段是私有的
作者: 史政法    时间: 2013-3-25 18:34
胡志超 发表于 2013-3-25 18:31
你这里的属性,并不是私有成员,字段是私有的

刚才没写完,不知道怎么就发出去了,我又重新编辑了一下帖子,另我产生疑问的地方。。。。。。
作者: 史政法    时间: 2013-3-25 18:36
本帖最后由 史政法 于 2013-3-25 18:53 编辑
胡志超 发表于 2013-3-25 18:31
你这里的属性,并不是私有成员,字段是私有的

。。。。。。。
作者: 柳 德 彬    时间: 2013-3-25 18:42
子类可以继承父类的私有属性和方法,只不过看不到private修饰的内容,在后面可以通过反射来获取父类私有的属性和方法。
作者: 史政法    时间: 2013-3-25 18:56
柳 德 彬 发表于 2013-3-25 18:42
子类可以继承父类的私有属性和方法,只不过看不到private修饰的内容,在后面可以通过反射来获取父类私有的 ...

如果说子类继承了父类的私有方法,不就相当于子类中也有一份了?为什么不能通过获取到呢?
作者: 柳 德 彬    时间: 2013-3-25 19:09
史政法 发表于 2013-3-25 18:56
如果说子类继承了父类的私有方法,不就相当于子类中也有一份了?为什么不能通过获取到呢? ...

可以这么说吧修饰符private把权限提升了,子类没有权限访问
作者: 刘渝灵    时间: 2013-3-25 21:33
这位兄台,我代表毕老师鄙视你盗用他肖像这种行为
作者: 芦子骐    时间: 2013-3-25 23:58
这样,就记住一点就噢了,子类如果继承了父类,就可以把子类看做是父类全部+子类多出来的,这样就很明了了
作者: 郑晓飞    时间: 2013-3-26 02:26
父类中的成员没有被私有,子类继承父类,子类继承父类所有的属性和方法。
Java中父类的私有属性与方法子类是继承不到的,所以子类也是不能访问父类的私有属性的。private 属性的变量是继承不下来的 属于父类私有变量 子类中并不存在

也这样理解 父亲的私房钱,他授权儿子能用,别人不能用,就用 protected 修饰这笔钱,如果外人也能用,就 public 修饰,如果只有自己能用,其他人都不行,就 private 修饰了。




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