1 回答

TA貢獻1860條經驗 獲得超9個贊
這在 Java 中怎么可能實現?
事實并非如此,因為方法簽名必須是唯一的,而簽名是方法名稱和參數類型。
不過,這不是 JVM 的工作原理,而是 Java 的工作原理。
JVM 將返回類型作為簽名的一部分,因此從技術上講,一個類可以具有多個具有相同名稱和參數但返回類型不同的方法。
所以對于用其他 JVM 語言編寫的類肯定會發生這種情況,但是對于 Java 類會發生這種情況嗎?
是的,當您有重寫方法的協變返回類型時,它可以。真正發生的是這個假代碼:
class ShapeBuilder {
? ? ...
? ? public Shape build() {
? ? ....
}
class CircleBuilder extends ShapeBuilder{
? ? ...
? ? @Override
? ? public bridge Shape build() { // override matches full JVM signature
? ? ? ? return <Circle>build(); // call other method with different return type
? ? }
? ? public Circle build() {
? ? ....
}
“橋接”方法是編譯器生成的一種隱藏方法,用于使Java和JVM之間的差異正常工作。
僅供參考:在這方面,“橋”方法類似于“合成”方法,它們由編譯器生成,以允許外部類訪問private內部類的成員,反之亦然。
添加回答
舉報