代码:
public class Pair<T> {
private T t1;
private T t2;
public T getT1() {
return t1;
}
public void setT1(T t1) {
this.t1 = t1;
}
public T getT2() {
return t2;
}
public void setT2(T t2) {
this.t2 = t2;
}
}
public class User {
private String name;
private String sex;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
public class Twins extends Pair<User> {
@Override
public void setT1(User t1) {
if (t1 != null) {
super.setT1(t1);
}
}
@Override
public void setT2(User t2) {
if (t2 != null) {
super.setT2(t2);
}
}
}
问题描述:虚拟机会将 Pair进行类型擦除,擦出后类型变量将替换为 Object,那么 Twins 类重写的方法 void setT1(User t1)及 void setT2(User t2)中参数会擦出为 Object吗?为什么?
3 回答

墨色风雨
TA贡献1853条经验 获得超6个赞
父类Pair进行类型擦除,擦出后类型变量将替换为Object,子类 Twins 类重写的方法 void setT1(User t2)及 void setT2(User t2)不会被擦出为Object,但这样参数列表变了,不是重写了,所以子类Twins自动生成了两个方法setT1(java.lang.Object)和setT2(java.lang.Object)方法重写父类两个方法,在里面调用void setT1(User t2)及 void setT2(User t2)这两个方法,所以子类Twins是有四个方法.
添加回答
举报
0/150
提交
取消