问题:

父类或接口中定义了方法应该抛出的异常,那么当子类重写方法时应该怎样定义将要抛出的异常:

首先定义异常和父类:

 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在方法继承中的限制的更多相关文章

  1. [Java] 继承中,父类被覆盖的成员变量、方法的可访问性

    在 Java 的继承机制里,在子类内部,可以访问父类被覆盖的变量和方法:在子类外部,可以访问父类的被覆盖变量,但是不能访问父类的被覆盖方法. 父类中被覆盖的方法不能在外部被方法,这是出于封装的考虑. ...

  2. python__基础 : 多继承中方法的调用顺序 __mro__方法

    在多继承中,如果一个子类继承了两个平级的父类,而这两个父类有两个相同名字的方法,那么一般先继承谁,调用方法就调用先继承的那个父类的方法.如: class A: def test(self): prin ...

  3. 四. Java继承和多态3. 继承中的方法的覆盖和重载

    在类继承中,子类可以修改从父类继承来的方法,也就是说子类能创建一个与父类方法有不同功能的方法,但具有相同的名称.返回值类型.参数列表. 如果在新类中定义一个方法,其名称.返回值类型和参数列表正好与父类 ...

  4. oc38--类工厂方法在继承中

    // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; ...

  5. python语言中多继承中super调用所有父类的方法以及要用到的MRO顺序

    在python多继承中,利用super().父类方法,可以调用所有父类,从而在重写的状态下,再次对所有父类的调用! 例: print("******多继承使用super().__init__ ...

  6. 1-Java继承中多态情况特性下变量,方法,静态方法的访问

    在Java继承下,多态特性下类成员访问情况 /* 在继承中,变量时静态的绑定的,非静态方法是动态的绑定的,静态方法是静态绑定的 */ class Parent{ int number = 11; pu ...

  7. [转]从普通DLL中导出C++类 – dllexport和dllimport的使用方法(中英对照、附注解)

      这几天写几个小程序练手,在准备将一个类导出时,发现还真不知道如果不用MFC的扩展DLL,是怎么导出的.但我知道dllexport可以导出函数和变量,而且MFC扩展DLL就算是使用了MFC的功能,但 ...

  8. 【转载】 C++多继承中重写不同基类中相同原型的虚函数

    本篇随笔为转载,原文地址:C++多继承中重写不同基类中相同原型的虚函数. 在C++多继承体系当中,在派生类中可以重写不同基类中的虚函数.下面就是一个例子: class CBaseA { public: ...

  9. python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

随机推荐

  1. MySql数据库安装&修改密码&开启远程连接图解

    相关工具下载地址: mysql5.6 链接:http://pan.baidu.com/s/1o8ybn4I密码:aim1 SQLyog-12.0.8 链接:http://pan.baidu.com/s ...

  2. Class.forName()的作用与使用总结

    1.Class类简介: Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类 ...

  3. String的一些总结(JAVA)

    equals: String s1=new String("Hello"); String s2=new String("Hello"); System.out ...

  4. js整理1

    数组 比较时的隐式转化 var a = [1,2,3]; var b = [1,2,3]; a == b; //false a == '1,2,3'; //true; // var c = []; B ...

  5. 【wpf】Path画扇形以及Path的Data属性的理解

    <Path x:Name="PathFillColor" Fill="{TemplateBinding Property=Button.Background}&qu ...

  6. http://blog.csdn.net/z69183787/article/details/37819831

    http://blog.csdn.net/z69183787/article/details/37819831

  7. 餐厅app总结

    2.总结:在这几个月来说,我们发现我们能力有点不足,整一个app,没有我们想象的那么完美,所以经过我们的讨论说,我们还是需要去加强一下每一个人的能力,但是整个作业,每个人都是尽了每个人的能力. (1) ...

  8. How to retrieve instance parameters from an uninstantiated (uninserted) family

    The trick to be able to read the default values for instance parameters is to get to the FamilyManag ...

  9. iOS学习37数据处理之CoreData

    1. CoreData数据库框架的优势 1> CoreData历史 CoreData数据持久化框架是Cocoa API 的一部分,首次在iOS5版本的系统中出现,它允许按照实体-属性-值模型组织 ...

  10. BZOJ 3223 & 区间翻转

    题意: 就是贴个代码,这是我入门题的弱化版..然而一共还是写了40分钟,不专注(一边看比赛一边打)是一个问题,splay每个操作的细节确实有点多(什么时候updata啊..什么时候pushdown啊. ...