Java學習筆記(三):面向對象
阿新 • • 發佈:2018-04-30
default 直接 imp 尋找 bst 構造 時也 fin 不同
1.繼承
語法
只能多層繼承,不能多重繼承,子類不能直接訪問父類中的私有成員,可通過getter和setter方法獲得class 父類{} class 子類 extends 父類{}
- 子類對象new實例化(時)
- 會默認先調用父類的構造方法,再調用子類的構造方法去實例化所以,若父類和子類構造方法裏含有輸出語句,會在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關鍵字的作用
super調用父類構造
**同this一樣,該語句必須放在構造方法的句首**
this與super的區別:
this:
01.屬性:調用本類中的屬性,若沒有,則從父類中尋找
02.方法:調用本類中的方法,若沒有,則從父類中尋找
03.構造:調用本領構造,必須放在構造方法的首行
04.特殊:表示當前的對象
super:
01.屬性:訪問父類中的屬性
02.方法:直接訪問父類中的方法
03.構造:調用父類構造,必須放在子類的構造方法裏的首行,如:super();
- final關鍵字
註意:
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
- 調用:調用子類自己的方法,一定只能用子類的實例化對象
- 註意:!!!在進行對象的向下轉型前,必須首先發生對象的向上轉型,否則將異常
讀法:一個程序要從右到左:
如:A a =new B(); 是B實例化了一個對象,該B的對象再向上轉型成為了A的對象a
5.instanceof關鍵字
- 用於判斷一個對象到底是誰哪個類的實例
- 對象 instanceof 類 -->返回boolean值
- 用途:
如下:
01.a1同時是A和B的對象-->通過子類實例化的對象同時也是父類和子類的實例,所以可以直接向上或向下轉型A a1=new B(); A a2=new A();
02.a2只是A的對象 -->此時不能向下轉型,因為沒有先向上轉型-->直接使用父類實例化本類對象,就不再是子類實例了,所以不能轉型向下轉型前進行判斷操作,避免異常
```
A a=new B();
if( a instanceof B){ }
Java學習筆記(三):面向對象