【发布时间】:2014-06-13 22:34:50
【问题描述】:
请比较两个代码sn-ps:
sn-p1:
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Child<String> p =new Child<String>();
p.m("1");
}
}
class Parent <T>{
void m(T t){
}
}
class Child<T extends CharSequence> extends Parent<String>{
void m(T t){
}
}
结果(online compiler):
Main.java:13: 错误:对 m 的引用不明确,两种方法都是 m(T#1) 在 Parent 和方法 m(T#2) in Child match p.m("1"); ^ 在哪里 T#1,T#2 是类型变量: T#1 扩展在 Parent 类中声明的 Object T#2 扩展在 Child 类中声明的 CharSequence
sn-p2(只有一个变化!!!):
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
Parent<String> p =new Child<String>();
p.m("1");
}
}
class Parent <T>{
void m(T t){
}
}
class Child<T extends CharSequence> extends Parent<String>{
void m(T t){
}
}
这段代码编译得很好!(online compiler)
请澄清这一区别。
【问题讨论】:
-
只是想知道:这行得通吗:
class Child<T extends CharSequence> extends Parent<T>{? -
@Martijn Courteaux 真的很有效)))泛型让我的大脑崩溃
标签: java generics overloading overriding type-erasure