假設您有一個擴展父類A的類B.要訪問B的方法,您可以使用它。要訪問A,你可以使用super。如果你有一個擴展B類的第三類C,你可以使用它來訪問C的方法,並使用超類來訪問B.如何從C類訪問A的方法?超級與這對於三個類
-2
A
回答
0
你其實不會因爲它會違反封裝原則。 但是,您可以在B類中創建一個與A相同的方法並獲得所需的結果。
0
讓我們用這個例子:
class Bird {
public final void eat() {
//...
}
public boolean canFly() {
return true;
}
}
class FlightlessBird extends Bird {
public boolean canFly() {
return false;
}
}
class Ostrich extends FlightlessBird {
public void takeoff() {
if (canFly()) {
//....
}
}
}
鴕鳥延伸FlightlessBird所以canFly()
將始終返回false。如果可以的話,無論如何撥打super.super.canFly()
你最終會得到一隻飛行的鴕鳥,這是任何人都不想看到的。基本上,方法由於某種原因被重寫,並且可能導致災難性結果。如果你在所有的孩子類中都需要一個方法,那麼將它標記爲final,這樣它就不能被覆蓋(就像上面的例子中吃的那樣)。如果您使用的是其他人的圖書館,並且您無法更改祖父母,那麼您需要直接從祖父母繼承。另外,如果你發現自己需要使用超級超級,那麼你可能做錯了什麼。
相關問題
- 1. 從哪個類超級和這種方法屬於?
- 2. 外部與超級類別
- 3. 繼承這個和超級
- 4. 超級VS這個當內部類擴展外部類
- 5. Java中,隱藏超級超級類
- 6. 這個關係的超級鍵
- 7. 我如何使這種搜索方法適用於子類以及超級類?
- 8. 三個關於node.js與ColladaLoarder
- 9. 當在一個子類中使用「超級」這個詞時,單詞超級強迫代碼做什麼?
- 10. 蟒:超級() - 等代理對象,開始於一個指定的類
- 11. 類「超級」可變
- 12. 超級和小類
- 13. 超級類參考
- 14. 與超級混淆
- 15. 這是什麼類型的關係,這對於一個類圖
- 16. 查找「老三」超類
- 17. 對於這個JavaScript
- 18. Java的設置從超級擴展類的一個在對象
- 19. 問超級超級
- 20. 將呼叫置於超級?
- 21. 關於超級關鍵字?
- 22. 從單個對象繼承的不同類型的集合與超級對象的單個集合
- 23. 調用超級()沒有超類?
- 24. 訪問超級超類中的方法
- 25. 靜態類有相當於$ this嗎? (種類超級,但對於當前類使用它)
- 26. Python類 - 超級變量
- 27. Java類超級查詢
- 28. 自我與超級差異
- 29. Java和跳過與超級
- 30. 我不明白'這個'與超類一起使用
這可能有助於 http://stackoverflow.com/questions/586363/why-is-super-super-method-not-allowed-in-java –
你不需要調用超級如果你不是壓倒一切。你需要給出一個更好的解釋。 –
「你會使用它來訪問C的方法,並且超級訪問B」這是根本錯誤的。 'super'可用於訪問代碼所在類的超類中的方法實現。因此,在類B中訪問具有'super'的方法將訪問類A中的方法(或其超類),即使當前對象具有C類(或其子類)。 'super'是一種完全不同的方法訪問方式。 – newacct