設計模式 黎克特制替換原則

2021-09-13 08:21:34 字數 2324 閱讀 6826

設計模式-黎克特制替換原則

物件導向的語言繼承必不可少的,有如下優點

**共享,減少建立類的工作量

提高**的重用性

提高**的可擴充套件性

提高**的可擴充套件性

提高產品**的開放性

繼承侵入性 只要繼承,必須擁有父類的內容

降低**的靈活性,子類必須擁有父類的屬性和方法

增強耦合性。

黎克特制替換原則,為繼承定義規範。

正方形是一種特殊的長方形,如果將正方形設計為長方形的子類,不符合黎克特制替換原則

下方有三個類

類圖如下

關係如上所示

package demo1;

public class smarttest }}

package demo1;

/* * 定義乙個長方形類

* @author ming

* */

public class rectangle

public long getwidth()

public void setheight(long height)

public long getheight()

}

package demo1;

/* * 定義乙個正方形類繼承自長方形類

* * @author ming

* * */

public class square extends rectangle

public long getwidth()

public void setheight(long height, long width)

public long getheight()

}

在上面的三塊**中,當呼叫smarttest類的resize方法的時候,如果傳入的是父類,那麼將會可以的,如果傳入的是子類,正方形,那麼將會不可以的。

即。上方的為長方形行,正方形不行。

所以上面的栗子不符合黎克特制替換原則。

解決方法,使用繼承時,要遵守黎克特制替換原則,類b繼承類a時,不要重寫父類a的方法,也不能過載父類a的方法。

如果**更改如下更改

讓其兩個都共同定義同乙個父類即可

其中最上層的類為兩個類的抽象類。

/* * 定義乙個四邊形類,只有get方法set方法

* @author ming

* */

public abstract class quadrangle

package com.ming;

public class rectangle extends quadrangle

public long getwidth()

public void setheight(long height)

public long getheight()

}

package com.ming;

public class square extends quadrangle

public long getwidth()

public void setheight(long height)

public long getheight()

}

在上方的圖中,由於兩個為平級關係,所以父類的地方,換成子類也都可以。

黎克特制替換原則;父類可以的地方,換成子類也同樣可以。

乙個栗子

package com.ming2;

public class a

}

package com.ming2;

public class b extends a

public int func2(int a, int b)

}

在上方中,如果這樣書寫

package com.ming2;

public class client

}

就違反了黎克特制替換原則,即子類能使用的時候,父類也必須能使用。

www.iming.info

設計模式 (黎克特制替換原則)

黎克特制替換原則的引入 是針對物件導向中的繼承的缺點 乙個原則首先先介紹下它的定義 黎克特制替換原則為繼承定義了規範,下面我用書中看到的例子來說 1.子類必須完全實現父類的方法 首先先定義乙個槍的抽象類 public abstract class abstractgun 實現類的定義,不同的槍枝進行...

設計模式 黎克特制替換原則

設計模式 黎克特制替換原則 oo 中的繼承性的思考和說明 繼承包含這樣一層含義 父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然它不強制要求所有的子類必須遵循這些契約,但是如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。繼承在給程式設計帶來便利的同時,也帶來了弊端。比如使...

設計模式 黎克特制替換原則

1 繼承包含這樣乙個含義 父類中凡是已經實現好的方法,實際上是在設定規範和契約,雖然他不強制要求所有子類遵循這些契約,但如果子類對這些已經實現的方法任意修改,就會對整個繼承體系造成破壞。2 繼承給程式帶來便利與帶來了弊端。比如繼承會給程式帶來侵入性,程式可移植性降低,增加物件間的耦合度。如果這個類被...