2015-04-07 83 views
1

我知道開放封閉原則意味着開放延伸和封閉進行修改。考慮一個例子如下開放封閉原則與繼承之間的區別

public class Vehicle{ 
    public void service(){ 
     //vehicle servicing code 
    } 
} 

public class Bike extends Vehicle{ 

    public void service(){ 
     // bike specific servicing 
    } 
} 

現在我明白了Bike類已經擴展Vehicle,並增加了使用開閉原則的新功能。

考慮我創建了Vehicle類的jar文件,然後Bike類從jar中擴展了Vehicle類。在這種情況下,我們不能修改Vehicle類,Bike擴展它。這是開放封閉原則的一個好例子嗎? 我想知道OCP是如何與繼承不同的

回答

1

OCP與繼承沒有區別,而是OCP的「打開」部分已打開以進行擴展,但應該關閉以進行修改。 也就是說該代碼只應修改錯誤/錯誤,但對於新擴展或對其應擴展功能的更改。

作爲一個方面說明,我相信這會更好地放在programmers.stackexchange.com網站。

+0

考慮我創建Vehicle類的jar文件,然後Bike類從jar擴展Vehicle類。在這種情況下,我們不能修改Vehicle類,Bike擴展它。這是開放封閉原則的一個好例子嗎? –

+1

我想說清楚一點,假設你有一個車輛類,你甚至可以創建一個車類,並且他們都定義了你如何服務他們。現在你把它作爲一個罐子發佈,如果有人帶着自行車或者甚至是特定的汽車說有特定服務要求的蘭博基尼,那麼你將不得不延長Car類或Vehicle類來「添加」這個功能。 –

+0

感謝它清除了這個概念。 :) –

相關問題