3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超7個(gè)贊
如果您想了解為什么需要橋接方法,則最好了解沒有它的情況。假設(shè)沒有橋接方法。
class A<T>{
private T value;
public void set(T newVal){
value=newVal
}
}
class B extends A<String>{
public void set(String newVal){
System.out.println(newVal);
super.set(newVal);
}
}
請注意,擦除后,由于Type參數(shù)不受限制,因此setin中的方法A成為了。有類沒有方法的簽名,其中相同的。因此沒有覆蓋。因此,當(dāng)發(fā)生這種情況時(shí):public void set(Object newVal)TBsetA
A a=new B();
a.set("Hello World!");
多態(tài)在這里不起作用。請記住,您需要在子類中重寫父類的方法,以便可以使用父類var觸發(fā)多態(tài)。
橋方法的作用是用名稱相同但簽名不同的方法的所有信息以靜默方式覆蓋父類中的方法。借助于橋接方法,多態(tài)性起作用了。盡管從表面上看,您可以使用具有不同簽名的方法覆蓋父類方法。

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊
令人驚訝的是,編譯器會(huì)推斷出該MyComparator方法:
public int compare(Integer a, Integer b) {/* code */}
正在嘗試覆蓋Comparator<T>的
public int compare(T a, T b);
從聲明的類型Comparator<Integer>。否則,編譯器會(huì)將MyComparators compare作為附加(重載)方法,而不是覆蓋該方法。因此,將不會(huì)為此創(chuàng)建橋方法。
添加回答
舉報(bào)