繼承和介面的設計
學習了一門的語言的時候,一開始總是這側重功能的實現。很少去關注優化設計,底層設計和架構設計,我想,這是也“碼農”的缺陷吧。一開始的時候,肯定有學習過繼承和介面的區別吧,但是實際使用者卻很少去關注這兩者的區別。程式設計久了,越來越覺得這兩者的使用真的很講究。
首先說下繼承,我把繼承分為2種,常用繼承和抽象類繼承。
概念與區別:
使用上的區別:一個類只能繼承一個父類,但是可以實現多個介面。原因:父類相當於子類的基礎屬性和方法。而介面則是功能性的。
常用繼承:就是普通的父類,子類繼承。子類擁有父類的所以屬性和方法,也可以重寫父類的屬性和方法(final修飾的無法重寫),所有被重寫的父類方法和父類屬性在子類也是存在。但是子類不能訪問
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的相同性質方法,但是有多種不同的實現方式。.......................................抽象類繼承
介面:如果我們要實現一系列功能,但是實現方式可能存在多種。 .........................................................................................介面
就是繼承與介面主要是看需不需要設定屬性。繼承是一系列相關類的共同集合,而且介面設計我認為是一系列相關方法的集合。有時候在開發過程中,為了同步開發,可以先定義好介面,這樣就方便了其他人員。