本帖最后由 尤洋 于 2012-8-7 22:26 编辑
最近论坛中有很多人都问到了关于override和overload的区别,于是我在网上搜索了一下关于这两者的详细资料。
发现很多人都将override理解为override 就是 子类方法 覆盖掉了 父类方法, 在比较其特点时 还专门有一点提到
被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
然后我产生了一个想法: 会不会在 override操作后 父类并没有被覆盖,仍然存在,只是在子类调用该方法时 父类的同名方法被屏蔽了,
所以看起来像被覆盖了。
而被覆盖的方法若为private的话 会有其他公共方式进行访问,打破了屏蔽,所以看起来没有覆盖成功。
我自己也做了段非常 简单的 小程序 来验证- class fu
- {
- public void dayin()
- {
- System.out.println("abc");
- }
- }
- class zi extends fu
- {
- public void dayin()
- {
- System.out.println("ABC");
- }
- }
- class shiyan
- {
- public static void main(String[] args)
- {
- fu f=new fu();
- zi z=new zi();
- z.dayin();
- f.dayin();
- }
- }
复制代码 最后结果为
ABC
abc
也就是说父类方法的确还存在,用覆盖去理解并不完全恰当
将上面代码中dayin()方法改为静态,然后创建dayin2()公共方法调用dayin(),
再来创建对象调用方法,得到的依然是
ABC
abc
|
|