【发布时间】:2019-01-30 15:55:12
【问题描述】:
使用给定的 2 个类:
public class A{
public <T> Cell<T> f(Cell<T> l){
return null;
}
}
public class B extends A{
public <T> Cell<T> f(Cell<Cell<T>> l){ // trying to override
return null;
}
}
(当 Cell 是一些通用类时)。
我知道在类型擦除之后,类看起来像:
public class A{
public Cell f(Cell l){
return null;
}
}
public class B extends A{
public Cell f(Cell l){ // trying to override
return null;
}
}
在我知道类型擦除之前,我想我确实理解为什么编译器将其视为重载。
但现在我(认为)我知道类型擦除,两个方法签名是相同的,我真的认为编译器将其视为 OVERRIDING 更有意义。
编译后,java 的编译器认为这是试图 OVERLOAD 而不是覆盖,并在重载到相同签名的方法时产生错误。
我的问题: 为什么编译器仍然认为这是对 OVERLOADING 而不是 OVERRIDING 的尝试,尽管在类型擦除之后签名是一样的?
谢谢!
【问题讨论】:
标签: java generics overriding overloading type-erasure