免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: moonight
打印 上一主题 下一主题

请教能不能调用父类的父类的方法 [复制链接]

论坛徽章:
0
1 [报告]
发表于 2004-05-20 08:52 |显示全部楼层

请教能不能调用父类的父类的方法

不能这么做。

论坛徽章:
0
2 [报告]
发表于 2004-05-20 13:53 |显示全部楼层

请教能不能调用父类的父类的方法

代码是没有错,可是楼主的目的是不能达到的。
因为sound方法已经被C这个类覆盖了,所以调用的是C.sound()
看一下effective java那本书,里面提到在constructor里调用overridable method是个不好的编码方式

论坛徽章:
0
3 [报告]
发表于 2004-05-26 11:27 |显示全部楼层

请教能不能调用父类的父类的方法

  1. public class SuperTest2 {

  2.     public static void main(String[] args) {
  3.         B1 b = new B1();
  4.     }
  5. }

  6. class A1 {

  7.     protected String v = null;

  8.     public A1() {
  9.         sound();
  10.         System.out.println(v.charAt(0));
  11.     }

  12.     public void sound() {
  13.         v = "aaaaa";
  14.     }
  15. }

  16. class B1 extends A1 {

  17.     //The developer of class B1 casually overide the method sound()
  18.     //All things seem good, but the new sound cause B1 broken.
  19.     public void sound() {
  20.         System.out.println("This sound() method does not initialize v");
  21.     }
  22. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2004-05-26 11:31 |显示全部楼层

请教能不能调用父类的父类的方法

你看一下我写的这个例子就明白了。运行就会出错。

因为B1自己没有定义缺省构造函数,所以new B1()的时候调用的是A1的构造函数,但是A1的构造函数依赖于一个可以被覆盖的方法sound()。B1不正确地(实际上如果B1的程序员没看到A1的源码的话,会认为他的做法没有错误)覆盖了sound(),使得B1根本不能用。

论坛徽章:
0
5 [报告]
发表于 2004-05-26 22:51 |显示全部楼层

请教能不能调用父类的父类的方法

这个地方确实说错了。
应该说因为B1没有定义构造函数,自然也就没有显式调用任何A1的构造函数,所以调用A1的缺省构造函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP