代碼:
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
提交
取消
