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-02-27 20:37
- 浏览 2988
- 评论(4)
- 论坛回复 / 浏览 (4 / 3494)
- 查看更多
相关推荐
Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 重写(Override)讲解 定义一个名为 Animal 的父类和一个名为 Cat 的...
从虚拟机角度看Java多态->(重写override)的实现原理
方法重写(Override/Overwrite):是指子类重写了从父类继承过来的方法。 区别:方法重载没有继承、属于一种静态联编技术。 方法重写有继承、属于动态联编技术。 10.什么是抽象类?什么是接口?抽象类与接口的区别?
Java面向对象(进阶)-- 四种权限测试与方法的重写(override_overwrite)
java
// 这个方法并没有Override父类中的fun1方法,因为这个方法在 // 父类是private类型,所以这里只是相当于定义了一个新方法。 public void fun1() { System.out.println("method fun1 in Test"); } } class ...
在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。 但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。 方法重写又称方法覆盖。 (2)若子类中...
主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
2.方法重写(override): 1)发生在父子类中,方法名相同,参数列表相同,方法体不同 2)重写方法被调用时,看对象的类型 3)重写需要遵循“两同两小一大”原则 3.重写与重载的区别:------------常见面试题
主要介绍了java 重载(overload)与重写(override)详解及实例的相关资料,并附实例代码,需要的朋友可以参考下
方法重写发生在类继承时,子类可以重写一个父类中已有的方法,必须在返回类型和参数列表一样时才能说是重写,否则就是重载,java中方 法重写的一个重要而且容易被忽略的规则是重写的方法的访问权限不能比被重写的...
熟悉使用@Override注解重写父类方法和使用super关键字调用父类方法。 阅读建议: 建议读者在阅读前具备Java的基础知识,包括类、对象、方法和成员变量等概念。 在阅读过程中,尝试编写简单的Java程序,创建并使用...
子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。 例如: class Animal { public void move() { System.out.println("动物...
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和...
用final关键字修饰的方法是不能被该类的子类override(重写),因此,如果在想明确禁止 该方法在子类中被覆盖的情况下才将方法设置为final的。 注:类的private方法会隐式地被指定为final方法。 public class ...
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,想要了解更多请参考本
java中如何实现代理机制 死锁的产生和预防 序列化 和 反序列化 json 和 xml 的区别 接口和抽象类的区别: 反射机制 泛型类 数据库连接池 java 源码分析(集合&框架) 运行时数据区域 内存溢出 垃圾回收 垃圾收集器 类...
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的...
9.Java中访问数据库的步骤,Statement和PreparedStatement之间的区别。 10.找出下列代码可能存在的错误,并说明原因: 二、JSP&Servlet技术 1.描述JSP和Servlet的区别、共同点、各自应用的范围 2.在Web开发中...