案例-1
interface Test{
public void display();
}
public class TestGenerics implements Test{
@Override
public <T> void display() {
System.out.println("done");
}
public static void main(String args[]){
TestGenerics ts = new TestGenerics();
ts.display();
}
}
在Case-1中,接口中的方法没有任何泛型数据类型,但是TestGenerics类中的overriden方法在方法签名中有一个泛型数据类型<T>
。这违反了重写完全匹配display()的方法签名的方法规则,并引发编译错误。
案例-2
interface Test{
public <T> void display();
}
public class TestGenerics implements Test{
@Override
public void display() {
System.out.println("done");
}
public static void main(String args[]){
TestGenerics ts = new TestGenerics();
ts.display();
}
}
在案例2中,代码按照接口的方法声明中提供的方法覆盖和泛型的概念工作得很好。要注意的是,TestGenerics类中的Overriden方法没有指定泛型类型<T>
。
该查询是,为什么编译在案例1中失败,而在案例2是反之亦然,从Java重写方法的角度来看。
任何指示都将不胜感激。
https://stackoverflow.com/questions/36516923
复制相似问题