不能覆写

import java.util.*;
class Parent {
public void m1(List list)
{
System.out.println("父类");

}
}
class Baby extends Parent {
public void m1(List list)
{
System.out.println("子类");

}

}
class OverrideTest {

public static void main(String[] args) {

}
}
方法m1的签名的擦除相同但是不能覆写,求解答

oo

5个回答

原因就在于这两个方法无论重载还是重写,泛型擦除了就是一样的方法了。你想想,同一个类里面可能有两个完全一样的方法吗,不可以是吧

因为擦除之后就是一样的啊 你不是问过的么

方法m1的签名的擦除相同?

擦除还是参数?

[quote]
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。

overload(重载)
1、参数类型、个数、顺序至少有一个不相同。

2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
[/quote]

而你两个方法的参数并不一致吧,应该算是重载吧。

参数类型不同,导致不能复写。

这完全是编译器层面的检测。

编译器知道这两个方法是父子类,方法名一样,因为泛型擦除的关系,参数类型最终也会一样,都是个List,按理说这应该是覆盖,但编译器有自己的职责,要保证泛型类尽可能不出现类型转换错误(泛型也就在编译期起类型保护用),这个“覆盖”很显然会带来多态调用的类型转换错误,所以就导致这段代码编译通不过

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐