Java中類與類之間的關係
阿新 • • 發佈:2022-04-16
1.呼叫
下面是不同的類呼叫不同的類是否合法的總結表格。
被呼叫類的型別 | 同一類 | 同一包 | 不同類的子類 | 不同步的非子類 |
---|---|---|---|---|
Private類 | √ | |||
Default類 | √ | √ | ||
Protected類 | √ | √ | √ | |
Public類 | √ | √ | √ | √ |
2.繼承
繼承關係下,子類對父類有依附關係,如果父類發生變化,子類實現也不得不跟著變化。繼承關係下,Java支援多層繼承,但不支援多繼承,如:
public class Son extends Father,mother;
這是多繼承,即一個子類同時繼承多個父類,是不正確的。
public class Son extends Father;
public class Father extends Granddad;
這是多層繼承,即子類繼承的父類,可以是其他類的子類。
繼承提高程式碼的複用性和維護性但使類的耦合性增強,削弱了子類的獨立性。
3.類套類
巢狀類:在類中定義的類,巢狀類包括靜態巢狀類和內部類
靜態巢狀類:用static修飾的類,在本質上是個頂級類,對比一般的頂級類,靜態巢狀類可以直接訪問外部類除例項成員以外的其他成員(例項成員必須先建立外部物件才能呼叫)
內部類:沒有用static修飾的類,可以直接訪問外部類的成員,外部類要訪問內部類的成員,必須建立物件,包括成員內部類和區域性內部類
成員內部類:定義在類的成員位置
區域性內部類:定義在類的區域性位置(程式碼塊中),不能定義除編譯時常量以外的任何static成員,可以直接訪問外部類中所有成員
匿名內部類:定義在方法裡面的區域性內部類,本質上是一個繼承了該類或者實現了該介面的子類匿名物件
類套類的關係下,除靜態巢狀類以外,類與類的耦合性更強,巢狀類的獨立性更弱,但是提高了一些類的隱蔽性,增加了一些訪問特權。