Exception在方法继承中的限制
问题:
父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常:
首先定义异常和父类:
class Exception1 extends Exception {}
class Exception2 extends Exception {}
class Exception3 extends Exception {}
class Exception1_1 extends Exception1 {}
class Exception2_1 extends Exception2 {}
class Exception3_1 extends Exception3 {}
class SuperClass {
public void method1() throws Exception1 , Exception2 , Exception3 {}
}
正确的方法覆盖:
1. 子类方法只能抛出父类异常的子集合:
public class TestExceptionLimit extends SuperClass {
@Override
public void method1() {}
}
public class TestExceptionLimit extends SuperClass {
@Override
public void method1() throws Exception1 {}
}
public class TestExceptionLimit extends SuperClass {
@Override
public void method1() throws Exception1 , Exception2 , Exception3 {}
}
上面三种都可以。
2. 子类可以抛出父类异常的导出类:
public class TestExceptionLimit extends SuperClass {
@Override
public void method1() throws Exception1_1 , Exception2_1 {}
}
3. 还有一种特殊的情形,当子类同时继承一个父类和实现一个接口,而且这个父类和接口同时定义了签名一样的方法,但是抛出异常不一样,那么子类应该怎样定义自己的方法异常:
新的代码:
class Exception4 extends Exception {}
class Exception5 extends Exception {}
class SuperClass {
public void method1() throws Exception4{}
}
interface TestInterface {
public void method1() throws Exception5 ;
}
正确的覆盖:
public class TestExceptionLimit extends SuperClass implements TestInterface {
@Override
public void method1(){}
}
注意:不要抛出任何异常,下面可以证明:
public class TestExceptionLimit extends SuperClass implements TestInterface {
@Override
public void method1() throws Exception4 {}
}
这段代码编码会出错,错误信息为:Exception Exception4 is not compatible with throws clause in TestInterface.method1()。表示和接口定义的异常不匹配,如果你尝试抛出Exception5它又会告诉你和父类定义的异常不匹配,所以不写还不行嘛--!,Java设计者们还是挺人性化的~~~
Exception在方法继承中的限制的更多相关文章
- [Java] 继承中,父类被覆盖的成员变量、方法的可访问性
在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. ...
- python__基础 : 多继承中方法的调用顺序 __mro__方法
在多继承中,如果一个子类继承了两个平级的父类,而这两个父类有两个相同名字的方法,那么一般先继承谁,调用方法就调用先继承的那个父类的方法.如: class A: def test(self): prin ...
- 四. Java继承和多态3. 继承中的方法的覆盖和重载
在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...
- oc38--类工厂方法在继承中
// Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; ...
- python语言中多继承中super调用所有父类的方法以及要用到的MRO顺序
在python多继承中,利用super().父类方法,可以调用所有父类,从而在重写的状态下,再次对所有父类的调用! 例: print("******多继承使用super().__init__ ...
- 1-Java继承中多态情况特性下变量,方法,静态方法的访问
在Java继承下,多态特性下类成员访问情况 /* 在继承中,变量时静态的绑定的,非静态方法是动态的绑定的,静态方法是静态绑定的 */ class Parent{ int number = 11; pu ...
- [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)
这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...
- 【转载】 C++多继承中重写不同基类中相同原型的虚函数
本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...
- python 继承中的super
python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...
随机推荐
- Laravel系列 目录结构
Where Is The Models Directory? app directory by default 其中 app:,core code of your application, almos ...
- HTML DOM学习之一
1.HTML DOM定义了访问和操作HTML文档的标准方法:DOM以树型结构表达了HTML文档: 2.DOM是W3C的标准,定义了访问HTML和XML文档的标准: DOM(文档对象模型)是中立于平台和 ...
- POJ 1635 树的最小表示法/HASH
题目链接:http://poj.org/problem?id=1635 题意:给定两个由01组成的串,0代表远离根,1代表接近根.相当于每个串对应一个有根的树.然后让你判断2个串构成的树是否是同构的. ...
- zoom作用
转自:http://www.cnblogs.com/top5/archive/2011/07/11/2103343.html css中的zoom的作用1.检查页面的标签是否闭合不要小看这条,也许折腾了 ...
- WebApi 2:属性路由 [Route()],attribute routing
原文:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 属性 ...
- 《HBase实战》
对,我正在研读这本书,今天开始,我希望我看完后能有收获和大家分享,这个日志作为开始,勉励自己! 对,我应该静下心,做一些我更喜欢的事情,不能在自我陶醉中迷失! 断断续的看,到今天大概把这本书看完了,没 ...
- BOM和DOM的区别和关联
BOM 1. BOM是Browser Object Model的缩写,即浏览器对象模型. 2. BOM没有相关标准. 3. BOM的最根本对象是window. 从1可以看出来:BOM和浏览器关系密切. ...
- HTML入门第一天
http:超文本标记语言,主要用途是开发网页,使用http展现文字图片 视频 声音 表格 链接……是web网站开发的基础 www(万维网/因特网):world wide web w3c是制定web标准 ...
- 【原】iOS学习之卸载Openfire
在即时通信编程中,你的Openfire服务可能因为各种不同的原因,出现不能使用.无法连接等问题. 解决这类问题最直接和省时间的方式就是卸载后重装,本篇主要为大家介绍如何卸载Openfire. 首先,确 ...
- BZOJ3591: 最长上升子序列
因为是一个排列,所以可以用$n$位二进制数来表示$O(n\log n)$求LIS时的单调栈. 首先通过$O(n^22^n)$的预处理,求出每种LIS状态后面新加一个数之后的状态. 设$f[i][j]$ ...