1. 程式人生 > >繼承和介面的設計

繼承和介面的設計

  學習了一門的語言的時候,一開始總是這側重功能的實現。很少去關注優化設計,底層設計和架構設計,我想,這是也“碼農”的缺陷吧。一開始的時候,肯定有學習過繼承和介面的區別吧,但是實際使用者卻很少去關注這兩者的區別。程式設計久了,越來越覺得這兩者的使用真的很講究。

  首先說下繼承,我把繼承分為2種,常用繼承和抽象類繼承。

概念與區別:

 使用上的區別:一個類只能繼承一個父類,但是可以實現多個介面。原因:父類相當於子類的基礎屬性和方法。而介面則是功能性的。


  常用繼承:就是普通的父類,子類繼承。子類擁有父類的所以屬性和方法,也可以重寫父類的屬性和方法(final修飾的無法重寫),所有被重寫的父類方法和父類屬性在子類也是存在。但是子類不能訪問

到父類的private的屬性。既然不能訪問,為什麼還要繼承他呢?根據我的實際使用,我想這在類的向上轉型的時候用的到。

eg:      

 Father father=new Son();
father.setId(5);
System.out.println(father.getId());

   在這個例子中Father。包含的一個private屬性的id。但是實際呼叫中,father卻是Son物件,要是Son物件內沒有繼承private屬性,father指向Son物件(向上轉型)就無法實現。畢竟宣告的時候不會實現化物件。物件只有一個,卻要當成2個用,所以,Son必須隱式繼承Father的私有成員。當呼叫被重寫的方法時,只能呼叫到子類重寫後,子類物件只能呼叫到子類重寫後的,要使用隱藏的父類方法或者變數,可以使用super.成員名。


 抽象類繼承:

    設計一個抽象類。與常用繼承的區別就是,抽象類的方法至少有一個抽象的,沒有方法體(也就是沒有{})。子類繼承的時候必須實現抽象方法。


介面:只有抽象方法,使用時必須實現所有的抽象方法。


使用:

   繼承:如果有共同的屬性和共同的方法。.......................................................................................................................................常用繼承

               如果有共同的屬性,0-n的共同方法,1-n的相同性質方法,但是有多種不同的實現方式。.......................................抽象類繼承

    介面:如果我們要實現一系列功能,但是實現方式可能存在多種。 .........................................................................................介面

就是繼承與介面主要是看需不需要設定屬性。繼承是一系列相關類的共同集合,而且介面設計我認為是一系列相關方法的集合。有時候在開發過程中,為了同步開發,可以先定義好介面,這樣就方便了其他人員。