java继承返回值类型_java继承或实现方法时异常和返回值的类型范围

之前写代码,有遇到一个方法在父类抛异常(class T)、子类不抛异常(class T1),或者在父类不抛异常(class T)、子类抛异常的场景(class T2);

还有是返回值类型在父类是类型T(class T)、在子类是T的子类T1(class T3),或者返回值类型在父类是类型T的子类T1(class T)、在子类是T(class T4)。

class T {

public void f1() throws Exception {}

public void f2() {}

public T f3() {return null;}

public T1 f4() {return null;}

public void f5() throws IOException {}

}

class T1 extends T {

public void f1() {}

}

class T2 extends T {

public void f2() throws Exception {}

}

class T3 extends T {

public T1 f3() {return null;}

}

class T4 extends T {

public T f4() {return null;}

}

class T5 extends T {

public T f5() throws Exception {}

}

class T6 extends T {

public void f1() throws IOException {}

}

class T7 extends T {

public T f1() throws Exception {}

}

测试可见T2和、T4、T5、T7代码错误。

具体有哪些规则?想一下可以知道,在调用一个对象T的方法时,会处理方法的返回值和异常,

如果T的子类的这个方法的返回值或异常的范围变大了【比如原本没异常的有异常了(class T2)、原本只处理异常E但现在成E的父类了(class T5)、返回值原本没有而现在有了(class T7)、返回值原本是子类现在成父类了(class T4)】,原来调用的地方就不能处理这些多余异常和返回值。

像RuntimeException这种则能随便加,因为默认是处理了这种异常的。


版权声明:本文为weixin_42164931原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。