我可以在方法覆盖时更改参数类型吗?如果我这样做,它是否会被方法覆盖或超载?
答案 0 :(得分:0)
一般来说,不是,除了一个特例。可以使用其已擦除的签名覆盖方法,如以下示例所示:
class Example {
void m1(List<Double> arg0) {}
<T> void m2(T arg0) {}
}
class ErasedExample extends Example {
// erasure of m1
@Override
void m1(List arg0) {}
// erasure of m2
@Override
void m2(Object arg0) {}
}
这在§8.4.2中注明:
方法
m1
的签名是方法m2
签名的子签名,如果是:
m2
与m1
具有相同的签名,或
m1
的签名与m2
签名的删除(§4.6)相同。两个方法签名
m1
和m2
是覆盖等效 iffm1
是m2
或m2
的子签名是m1
的副标记。
(§8.4.8.1也是相关的。)
换句话说,如果1)方法具有相同的签名或 2,则方法可以覆盖另一个方法.2)子类型方法具有超类型方法的擦除签名。