论坛首页 入门技术论坛

(五): Java中方法的重写(override)

浏览 3509 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-02-27   最后修改:2009-03-03
public class Parent{
	public void output()throws NullPointerException{
		System.out.println("parent");
	}
}
public class Child extends Parent{
	public void output() throws Exception{
		System.out.println("child");
	}
}
public class OverrideTest {
	public static void main(String[] args) {
		Parent p = new Child();
		p.output();
         }
}

问题:上述程序能编译通过吗?如果不能,请说明理由。如果能编译通过,那么能执行成功吗?如果不能执行成功,请说明理由。如果能执行成功,那么程序执行的结果是什么?
解答:上述程序无法编译通过。
分析:此为考察java中方法重写的要求,由于父类抛出的异常为NullPointerException,而子类抛出的异常为Excetpion, 违背了方法重写,子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围的原则,所以编译不能通过。
   
总结:关于java中方法重写(override)的要求:
     1、子类中的方法与父类中的方法有相同的返回类型
     2、子类中的方法与父类中的方法有相同的方法名称
     3、子类中的方法与父类中的方法有相同的参数列表
     4、子类中的方法的访问级别不能低于父类中该方法的访问级别(举例:父类方法的级别是protected,那么子类重写该方法,其级别必须是protected或者public,一定和父类的访问级别相同或者更宽,否则编译无法通过)
     5、子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围(子类可以不抛出异常也满足该原则,即是说父类抛出异常,子类不抛出异常,编译通过没问题。)
   发表时间:2009-03-02  
你这个例子应该有错误的
父类和子类没继承关系吧...
0 请登录后投票
   发表时间:2009-03-02  
谢谢您bludger,提醒了我,已经修正了!欢迎批评指正!呵呵
0 请登录后投票
   发表时间:2009-03-02  
还有一点,子类的方法可以返回父类方法返回类型的派生类型。
0 请登录后投票
   发表时间:2009-11-27  
子类和父类都是public的
什么道理?
wondering
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics