`
gatusso52
  • 浏览: 109652 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

重写与访问级别、异常声明

    博客分类:
  • java
 
阅读更多
   1. public class Parent{  
   2.     public void output()throws NullPointerException{  
   3.         System.out.println("parent");  
   4.     }  
   5. }  
   6. public class Child{  
   7.     public void output() throws Exception{  
   8.         System.out.println("child");  
   9.     }  
  10. }  
  11. public class OverrideTest {  
  12.     public static void main(String[] args) {  
  13.         Parent p = new Child();  
  14.         p.output();  
  15.          }  
  16. }  
 


问题:上述程序能编译通过吗?如果不能,请说明理由。如果能编译通过,那么能执行成功吗?如果不能执行成功,请说明理由。如果能执行成功,那么程序执行的结果是什么? 
解答:上述程序无法编译通过。 
分析:此为考察java中方法重写的要求,由于父类抛出的异常为NullPointerException,而子类抛出的异常为Excetpion, 违背了方法重写,子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围的原则,所以编译不能通过。 
    
总结:关于java中方法重写(override)的要求: 
     1、子类中的方法与父类中的方法有相同的返回类型 
     2、子类中的方法与父类中的方法有相同的方法名称 
     3、子类中的方法与父类中的方法有相同的参数列表 
     4、子类中的方法的访问级别不能低于父类中该方法的访问级别 (举例:父类方法的级别是protected,那么子类重写该方法,其级别必须是protected或者public,一定和父类的访问级别相同或者更宽,否则编译无法通过) 
     5、子类中方法抛出的异常范围不能大于父类中方法抛出的异常的范围 (子类可以不抛出异常也满足该原则,即是说父类抛出异常,子类不抛出异常,编译通过没问题。)

分享到:
评论

相关推荐

    javaSE代码实例

    11.3.4 方法重写对抛出异常声明的约束 210 11.4 定义自己的异常 212 11.4.1 创建自己的异常类 212 11.4.2 使用自定义的异常类 213 11.4.3 显性再抛出作用的体现 215 11.5 异常的匹配 217 11.5.1 同时...

    21天学通Java-由浅入深

    117 6.10 小结 118 6.11 习题 118 第7章 控制逻辑(精彩视频:50分钟) 120 7.1 包(package) 120 7.1.1 创建一个包 120 7.1.2 如何使用包 121 7.1.3 什么是静态引入 122 7.2 类的访问级别 123 7.2.1 公开的访问...

    java 面试题 总结

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。 Servlet被服务器实例化后,容器运行其init方法,...

    超级有影响力霸气的Java面试题大全文档

    java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 9、说出Servlet的生命周期,并说出Servlet和CGI的区别。  Servlet被服务器实例化后,容器运行其init方法...

    JAVA基础课程讲义

    方法重写中声明异常原则 102 异常的处理办法之三,手动抛出异常,throw子句 103 自定义异常 103 使用异常机制建议 104 总结 105 思考作业 105 上机作业 105 第五章 数组 106 数组概述和特点 106 创建数组和初始化 ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】访问修饰符区别 15 【基础】java基本数据类型(四类八种) 15 Java自动类型转换 16 数据类型自动提升(注意以下讨论的是二元操作符) 16 【基础】switch支持的类型 17 【基础】当一个对象被当作参数传递到一...

    【05-面向对象(下)】

    于类成员,类Field既可通过类来访问,也可以通过类的对象来访问。当通过对象来访问类属性时,系统会在底 层转换为通过该类来访问类 属性。 类成员规则 •类成员并不是属于实例,它是属于类本身的。只要...

    C#微软培训资料

    8.4 异常处理语句 .95 8.5 小 结 .100 第三部分 面向对象的 C#.101 第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计...

Global site tag (gtag.js) - Google Analytics