標籤:div 概念 private 注意 bst 關鍵字 多態性 get 物件導向
1.繼承
- 會預設先調用父類的構造方法,再調用子類的構造方法去執行個體化所以,若父類和子類構造方法裡含有輸出語句,會在new時都列印
- 實際上,子類構造裡隱含了super();調用了父類構造
- 子類覆寫的方法不能擁有比父類方法更加嚴格的存取權限
(如:父類--public ,子類也必須是--public )
- 父類方法被子類方法覆寫後,如何訪問該父類方法?
```
- 使用super();關鍵字即可,如:super.print();
- 在子類中,直接通過“super.方法()”形式即可訪問父類中的方法
```
- .特例:private-->到default不算覆寫,而是重新定義了一個新的方法!
- 繼承後重新定義屬性,同覆寫方法一致
-
特別:在子類中:
1.super.name-->訪問父類中的name屬性2.this.name-->訪問“本“類中的name屬性
-
重載:
01.方法名相同參數類型或個數不同02.對許可權沒有要求03.發生在同一個類中
-
覆寫:
01.方法名稱,參數類型相同02.被覆寫的方法(即子類方法)不能擁有(比父類方法)更嚴格的存取權限03.發生在繼承類中
-
super調用父類構造
**同this一樣,該語句必須放在構造方法的句首**
-
this與super的區別:
this:
01.屬性:調用本類中的屬性,若沒有,則從父類中尋找02.方法:調用本類中的方法,若沒有,則從父類中尋找03.構造:調用本領構造,必須放在構造方法的首行04.特殊:表示當前的對象
super:
01.屬性:訪問父類中的屬性02.方法:直接存取父類中的方法03.構造:調用父類構造,必須放在子類的構造方法裡的首行,如:super();
注意:
1. 使用final聲明的“類‘’不能有子類2. 使用final聲明的”方法”不能被子類所覆寫3. 使用final聲明的變數即為常量,常量不可修改!4. public static final同時聲明的變數稱為全域”常“量
2.抽象類別
- 包含一個抽象方法的類必須是抽象類別
- 抽象類別和抽象方法都要使用abstract關鍵字聲明
- 抽象方法只需聲明而不需要實現
- 抽象類別必須被子繼承,子類(如果不是抽象類別)必須覆寫抽象類別中的全部抽象方法
- 抽象類別不能直接執行個體化,必須經由非抽象子類進行子類的執行個體化
```
- 抽象類別:abstract class A {}
- 抽象方法:存取權限 abstract 傳回值類型 方法名稱(參數);
//在抽象方法中是沒有方法體的,不需要{}
- 子類的定義方法:class B extends A{ }
在子類還必須覆寫抽象類別中的全部抽象方法
- 注意:抽象方法不要用private關鍵字聲明,因為抽象方法必須被子類覆寫
-
本質:抽象類別比普通類多了個抽象方法,除了不能直接進行對象的執行個體化操作外其實並沒有不同
```
3.介面
- 最重要的概念之一
-
由全域常量和公用的抽象方法組成
interface 介面名稱 {全域常量;抽象方法;}
- 此處的抽象方法必須定義為public 存取權限,不可更改!!!
- 當然,也可不寫,預設public ,而不是default
-
通常,我們知道,全域常量是public static final,抽象方法是public abstract,但此處特殊,預設所以可省略該定義,實際上還有的
interface A{ String s="作者"; //定義全域常量 void print(); //定義抽象方法 String getInfo(); //抽象方法不需{}}
- class 子類名 implements 介面A,介面B{ } !!!
一個子類可以實現多個介面,class A implements B,C{}
- 實現後,必須覆寫全部抽象方法
-
一個介面不能繼承抽象類別,但一個介面允許繼承多個介面
interface A{} interface B{} interface C extends B,C{}
- 即一個介面可以同時繼承多個介面,注意是繼承extends!!!
-
介面不能實現介面,可以實現繼承
4.對象的多態性
- 方法的重載和覆寫
- 對象的多態性
01.向上轉型:子類對象-->父類對象,會自動完成
02.向下轉型:父類對象-->子類對象,必須指定轉型的子類類型
-
對象向上轉型:父類 父類對象 =子類執行個體;
如:B b =new B(); //子類執行個體化過程 A a =b; //向上轉型
-
對象向下轉型:子類 子類對象 =(子類)父類執行個體;
如:A a =new B(); //向上轉型B b =(B)a; //向下轉型:A-->B
- 對象 instanceof 類 -->返回boolean值
-
如下:
A a1=new B(); A a2=new A();
01.a1同時是A和B的對象-->通過子類執行個體化的對象同時也是父類和子類的執行個體,所以可以直接向上或向下轉型
02.a2隻是A的對象 -->此時不能向下轉型,因為沒有先向上轉型-->直接使用父類執行個體化本類對象,就不再是子類執行個體了,所以不能轉型
-
向下轉型前進行判斷操作,避免異常
```
A a=new B();
if( a instanceof B){ }
Java學習筆記(三):物件導向