
地 址:上海市松江66号
电 话:15318911309
网址:allin0.com
邮 箱:63385369@qq.com
方法重写是重写面(mian)向(xiang)对象编程中的一个核心概念,它允许子类重新定义父类中已(yi)经存在的报(bao)错方法,这样做可以让子类(lei)以特定的重写方式实现(xian)方法,以满足其自身的报错需求,在重写方法的重写过程中,可能会遇到各种报(bao)错,报错这(zhe)些错误的重写原因多种多样(yang),以下将详细探讨一些常见的(de)报错原因。(图片(pian)来源网络,重写侵删)
1、报错返回类型不匹配

在Java这样(yang)的重写强类型语言中,重写方法时必须(xu)保持返回(hui)类型与被重写方法相(xiang)同,报错如果返回(hui)类型不匹配,重(zhong)写编译器会报错,报错如果父类中的重写方法返回一个Integer类型(xing),子类重写的方法不(bu)能返回一个int类型或(huo)者其他的类型。

class Parent { public Integer method() { return 1; }}class Child extends Parent { // 错误的重写,因为返回类型不匹配 public int method() { return 1; }}2、访问权限(xian)限制

class Parent { public void method() { // ... }}class Child extends Parent { // 错误,因为访问权限被缩小了 protected void method() { // ... }}子类重写方法时,只能抛出在父类方法中声明的异常类型的子类,不(bu)能抛出父类(lei)方法中没有声明的检查异常。
class Parent { public void method() throws IOException { // ... }}class Child extends Parent { // 错误,因为抛出(chu)了(le)新的检查异常 public void method() throws Exception { // ... }}4、方法(fa)签名(ming)不匹配
重写要求方法名、参(can)数列表完全一致,如果参(can)数列表不一致,即使是参数类型(xing)不同,也会导致编译错误。
class Parent { public void method(int i) { // ... }}class Child extends Parent { // 错误,因为参数(shu)类型不匹配 public void method(Integer i) { // ... }}class Parent { public static void method() { // ... }}class Child extends Parent { // 错误,不能通过实例方法重写静态方法 public void method() { // ... }}6、final方法不可重写
在父类中用final关键字修饰的方法表示(shi)该方(fang)法不可被继承或重写,如果尝试重写这样的方法(fa),编译器将报(bao)错。
class Parent { public final void method() { // ... }}class Child extends Parent { // 错误,不(bu)能重写final方法 public void method() { // ... }}7、抽象方(fang)法未实(shi)现
如果(guo)父类(lei)中的方法(fa)为抽象方法,子类必须实现该方法,否则编译器会报错。
abstract class Parent { public abstract void method();}class Child extends Parent { // 错误,未实现抽象方法}8、泛型方法类型擦除
由于(yu)Java泛型的(de)类型擦除,重写泛型方法时可能会出现看似正确但实际(ji)上不匹配的(de)情况。
class Parent { public void method(List<String> list) { // ... }}class Child extends Parent { // 错误,尽管看起来匹配,但(dan)由于类型擦除,实际上(shang)不正确 public void method(List<Integer> list) { // ... }}