Java中的脆弱基類問題是什麼?什麼是脆弱的基類問題?
回答
脆弱的基類是繼承的常見問題,它適用於Java和任何其他支持繼承的語言。
簡而言之,基類是您繼承的類,它通常被稱爲fragile,因爲對此類的更改可能會在從其繼承的類中產生意外的結果。
減少這種方法的方法很少;但沒有直接的方法來完全避免它,而仍然使用繼承。通過在Java中將類聲明標記爲final
,可以防止其他類從類繼承。
避免這些問題最糟糕的最佳做法是將所有類標記爲最終的,除非您特別打算從它們繼承。對於那些打算繼承,設計它們就好像你正在設計一個API:隱藏所有的實現細節;嚴格要求你排出什麼,並小心你接受什麼,並詳細記錄班級的預期行爲。
當對其進行更改會破壞派生類時,基類稱爲脆弱類。
class Base{
protected int x;
protected void m(){
x++;
}
protected void n(){
x++; // <- defect
m();
}
}
class Sub extends Base{
protected void m(){
n();
}
}
對父類進行簡單更改會破壞子類時,它很脆弱。如果你改變了父母的一切,並導致孩子破裂,那並不一定意味着父母是脆弱的;如果你改變一些看起來很溫和的東西並且崩潰,那就很脆弱了。 – 2010-05-27 14:13:23
但是,哪些變化很簡單,即什麼是標準? – mlvljr 2010-05-27 14:32:30
所有什麼「科林·皮卡德」已經說的是真的,在這裏我要添加到列表,當你正在編寫的代碼,可能會導致這種在Java語言問題的最佳做法得到保護.. 。
- 讓所有的類爲final,因爲你不希望他們被繼承
- 做,如果你不能,你必須使用繼承(例如抽象類),然後讓所有的實現方法最終是沒有被其子類修改(甚至被保護的方法通常都是一個壞主意,子類不應該知道這麼多關於它的子類)...
- 儘量不要使用relationShip [是],而是嘗試使用[使用]關係堆之間的類圖使用接口,以避免擴展問題..
- 每個擴展可以是通過工具替代,如果你必須做出一個默認的實現這裏有一個代碼尖晶石:
public interface MyBehavior {
void doAction();
static class Implementation implements MyBehavior {
public void doAction() {
//do some stuff
}
}
}
// instead of doing extends To a class that have the doAction method
// we will make a [use a] relationShip between the Example class & the Implementation class
public class Example {
private MyBehavior.Implementation helper = new MyBehavior.Implementation();
public void doAction() {
this.helper.doAction();
}
}
- 1. 爲什麼WMDC/ActiveSync如此脆弱?
- 2. 如何使用幫助器方法解決脆弱的基類
- 3. 這是脆弱的堆棧溢出?
- 4. 如何使XSS脆弱箱
- 5. 有什麼辦法可以在R中創建「脆弱」屬性?
- 6. 任何使GetTypes()更脆弱的方法
- 7. 我的茉莉花測試太脆弱
- 8. C# - 基本問題:什麼是'?'?
- 9. 這段代碼太脆弱了嗎?
- 10. 我的存儲過程是脆弱的,我認爲
- 11. 脆弱的單元測試總是一件壞事嗎?
- 12. CanvasJS代碼依賴for循環,這是脆弱的
- 13. 形式目標=「_自我」是脆弱的嗎?
- 14. 弱引用問題
- 15. KiokuDB中的'弱引用'是什麼?
- 16. System.Linq.Expressions.LogicalBinaryExpression類有什麼問題?
- 17. 什麼是「弱框架參考」?
- 18. 這是爲什麼弱多態性
- 19. 什麼是強指針和弱指針
- 20. OSGi中的基礎主題是什麼?
- 21. Rails/Postgres脆弱的測試環境無法創建正確的數據類型
- 22. 什麼是Windows窗體的基類?
- 23. 什麼是基於堆棧的類?
- 24. 使用springframework的不良JUnit測試具有脆弱的Thread.sleep()調用。怎麼修?
- 25. 標要求接口的NSMutableArray的尺寸未在非脆弱ABI
- 26. 什麼是NP問題?
- 27. 什麼是「表達問題」?
- 28. 什麼是ICS問題
- 29. SAS基本問題:爲什麼MACRO?
- 30. 建議解決脆弱的模式匹配
抵制衝動主要參考書的大獎!或NIN專輯... – scunliffe 2010-05-27 13:15:50
對不起,打破它給你@scunliffe,但你失敗;-) – 2010-05-27 13:19:42
如果有人說FBC問題是基礎類與不明確(或不完全)指定的合同,以便改變類將可能打破依賴它的衍生出來的東西,這足夠嗎? 我們可以有派生接口,順便說一句? – mlvljr 2010-05-27 14:41:57