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 ...
随机推荐
- hdu 3037 Saving Beans Lucas定理
Saving Beans Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- Angular.js 以及个人学习网站
Angular.js 教程 http://www.360doc.com/content/14/0414/15/14416931_368816305.shtml web前端学习: 慕课网:http:/ ...
- Docker搭建便捷的开发者环境
你可能遇到这样的场景:开发软件时,需要像数据库(mysql,mongodb).消息系统(rabbitmq).缓存服务(redis)等其它依赖服务.当然我们可以找台机器,一步步安装依赖,然后把所有依赖的 ...
- Codeforces 343D Water Tree(DFS序 + 线段树)
题目大概说给一棵树,进行以下3个操作:把某结点为根的子树中各个结点值设为1.把某结点以及其各个祖先值设为0.询问某结点的值. 对于第一个操作就是经典的DFS序+线段树了.而对于第二个操作,考虑再维护一 ...
- Codeforces 627A XOR Equation(思路)
题目大概说两个正整数a.b,已知s=a+b以及x=a xor b的值,问有几种a.b这样的数对. 我知道异或相当于无进位的加法,s-x就是其各个位置的进位,比如s-x=1010,那就表示a和b的第1位 ...
- apache activemq 学习笔记
0.activemq的概念 activemq实现了jms(java Message server),用于接收,发送,处理消息的开源消息总线. 1.activemq和jms的区别 jms说白了就是jav ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest E. Equal Digits
E. Equal Digits time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 【Oracle】Oracle 11g 64位安装完后,ora-12541错误和ora-12514错误的解决
问题描述: 干净的windows2008 64位服务器上安装 oracle 11g R2 64bit服务端,安装完后,NetManager中默认的主机名为localhost,可以测试通过.但是无法在别 ...
- Android MultiDex
出现的原因: 当Android系统安装一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt.DexOpt的执行过程是在第一次加载Dex文件的时候执行的.这个过程会生 ...
- 【转载】LoadRunner11下载以及详细破解说明
前期准备:LoadRunner11 下载请猛戳这里 传送门LoadRunner破解文件 下载请猛戳这里 传送门LoadRunner注册表清理工具 下载请猛戳这里 传送门 LoadRunner11破解方 ...