程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java設計形式編程中的裡氏調換准繩

詳解Java設計形式編程中的裡氏調換准繩

編輯:關於JAVA

詳解Java設計形式編程中的裡氏調換准繩。本站提示廣大學習愛好者:(詳解Java設計形式編程中的裡氏調換准繩)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java設計形式編程中的裡氏調換准繩正文


界說1:假如對每個類型為 T1的對象 o1,都有類型為 T2 的對象o2,使得以 T1界說的一切法式 P 在一切的對象 o1 都代換成 o2 時,法式 P 的行動沒有產生變更,那末類型 T2 是類型 T1 的子類型。
界說2:一切援用基類的處所必需能通明地應用其子類的對象。
成績由來:有一功效P1,由類A完成。現須要將功效P1停止擴大,擴大後的功效為P,個中P由原有功效P1與新功效P2構成。新功效P由類A的子類B來完成,則子類B在完成新功效P2的同時,有能夠會招致原有功效P1產生毛病。
處理計劃:當應用繼續時,遵守裡氏調換准繩。類B繼續類A時,除添加新的辦法完成新增功效P2外,盡可能不要重寫父類A的辦法,也盡可能不要重載父類A的辦法。
         繼續包括如許一層寄義:父類中但凡曾經完成好的辦法(絕對於籠統辦法而言),現實上是在設定一系列的標准和契約,固然它不強迫請求一切的子類必需服從這些契約,然則假如子類對這些非籠統辦法隨意率性修正,就會對全部繼續系統形成損壞。而裡氏調換准繩就是表達了這一層寄義。
        繼續作為面向對象三年夜特征之一,在給法式設計帶來偉大方便的同時,也帶來了弊病。好比應用繼續會給法式帶來侵入性,法式的可移植性下降,增長了對象間的耦合性,假如一個類被其他的類所繼續,則當這個類須要修正時,必需斟酌到一切的子類,而且父類修正後,一切觸及到子類的功效都有能夠會發生毛病。

例子:

public class Rectangle { 
  int width; 
  int height; 
  public Rectangle(int w, int h){ 
    width = w; 
    height = h; 
  } 
  public int getArea(){ 
    return width*height; 
  } 
} 
 
public class Square extends Rectangle { 
  public Square(int w, int h) { 
    super(w, h); 
  } 
   
  public int getArea(){ 
    return width*width; 
  } 
} 
 
public class Test { 
  public static void main(String[] args) { 
    Rectangle rectangle = new Rectangle(10, 20); 
        // Square rectangle = new Square(10, 20); 
    System.out.println("面積:"+rectangle.getArea()); 
  } 
} 


假如我們把長方形類Rectangle 調換為正方形類Square,那末求出的面積就不准確了,緣由是我們繼續的時刻重寫了父類的getArea辦法。這是違反裡氏調換准繩的。
固然,這裡只是舉個例子,現實項目中我們不會如許修正的。

總結:
1. 盡可能不要重寫父類辦法,而是增長本身獨有的辦法。
2. 繼續給法式設計帶來偉大方便的同時,也帶來了弊病。假如一個類被其他的類所繼續,則當這個類須要修正時,必需斟酌到一切的子類,而且父類修正後,一切觸及到子類的功效都有能夠會發生BUG。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved