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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尤洋 中级黑马   /  2012-8-7 21:17  /  1106 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 尤洋 于 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




0 个回复

您需要登录后才可以回帖 登录 | 加入黑马