黑马程序员技术交流社区

标题: 对于覆盖override的一点理解 [打印本页]

作者: 尤洋    时间: 2012-8-7 21:17
标题: 对于覆盖override的一点理解
本帖最后由 尤洋 于 2012-8-7 22:26 编辑

最近论坛中有很多人都问到了关于override和overload的区别,于是我在网上搜索了一下关于这两者的详细资料。
发现很多人都将override理解为override 就是  子类方法 覆盖掉了 父类方法, 在比较其特点时 还专门有一点提到
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

然后我产生了一个想法: 会不会在 override操作后 父类并没有被覆盖,仍然存在,只是在子类调用该方法时 父类的同名方法被屏蔽了,
所以看起来像被覆盖了。
而被覆盖的方法若为private的话 会有其他公共方式进行访问,打破了屏蔽,所以看起来没有覆盖成功。

我自己也做了段非常 简单的 小程序 来验证
  1. class fu
  2. {
  3.         public void dayin()
  4.         {
  5.                 System.out.println("abc");
  6.         }
  7. }
  8. class zi extends fu
  9. {
  10.         public void dayin()
  11.         {
  12.                 System.out.println("ABC");
  13.         }
  14. }
  15. class shiyan
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 fu f=new fu();
  20.                 zi z=new zi();
  21.                 z.dayin();
  22.                 f.dayin();
  23.         }
  24. }
复制代码
最后结果为
ABC
abc
也就是说父类方法的确还存在,用覆盖去理解并不完全恰当
将上面代码中dayin()方法改为静态,然后创建dayin2()公共方法调用dayin(),
再来创建对象调用方法,得到的依然是
ABC
abc









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