一:多態java
面向對象的三大特性:
一、封裝:主要實現了隱藏細節,對用戶提供訪問接口,無需關心方法的具體實現。
二、繼承:很好的實現了代碼的複用,提升了編程效率。
三、多態:程序的可擴展性及可維護性加強。編程
引用類型之間的類型轉換: 前提類之間有繼承關係
一、向上轉型 父類類型的引用 引用 子類對象
1) 語法: 父類類型 引用名= new 子類類型();
2)父類型的引用能夠訪問哪此方法
a 、父類中聲明的方法
b、若是子類中重寫了父類的方法,則執行子類重寫後的方法
c、 不能訪問子類中特有的方法。
3) 示例:安全
class Animal{ public void eat(){ System.out.println("寵物在吃..."); } public void show(){ System.out.println("顯示寵物信息..."); } } class Dog extends Animal{ public void eat(){ System.out.println("狗狗吃狗糧..."); } public void play(){ System.out.println("狗狗啃傢俱..."); } } class SmallDog extends Dog{ } class Cat extends Animal{ public void eat(){ System.out.println("喵咪在吃魚..."); } public void play(){ System.out.println("喵咪在玩球..."); } }
public static void main(String[] args){ Animal am = new Dog(); am.eat(); am.show(); System.out.println("--------------------------"); Animal am2 = new Cat(); am2.eat(); }
二、向下轉型
1) 語法:
(子類類型)父類引用; //父類引用所引用的對象爲子類對象
2) 向下轉型是不安全的。 引起異常: java.lang.ClassCastException
3)向下轉型 之間使用instanceof關鍵詞判斷。
語法:
引用名 instanceof 類名或接口名
編譯期: instanceof 類名 與引用名的類型之間有繼承關係,無則編譯錯誤!
運行期: 引用的對象的類型爲 "instanceof 類"的同類或子類 返回true, 其餘 返回falsecode
Animal am = new Dog(); System.out.println(am instanceof Animal);//true System.out.println(am instanceof Dog);//true System.out.println(am instanceof Cat);//false System.out.println(am instanceof Object);//true System.out.println(am instanceof SmallDog);//false System.out.println(am instanceof String);//String與Animal之間沒有繼承關係
多態做用:對象
1 多態的前提
1.1 繼承的存在
1.2 方法重寫
2 多態表現方式:
2.1 語法:
父類類型 引用名= new 子類類型();
2.2 多 態的通常格式爲:方法的參數繼承
使用一個方法能夠對應父類的全部子類。接口
1) 將父類的引用作爲方法的形參。開發
2)將子類的實例作爲方法的實參。io
3 多態的好處:
3.1 知足開發的原則: 開-閉原則
開: 對功能的擴展開放。 ==》建立新的子類,經過方法重寫修改原父類中的方法的功能。
閉合 :對原有代碼的修改是閉合。 同時保證原有功能和新功能均可以執行。==》以多態的方式,在不修改原代碼的狀況下使用子類
3.2 多態的做用: 代碼的複用,易擴展。易維護。編譯
(final關鍵字):
1. final能夠修飾什麼
類,成員方法,成員變量,靜態變量,局部變量
2. final修飾類
不能被子類繼承
3. final修飾方法
不能被子類重寫
4. final修飾實例變量
僅賦值一次,不可更改。
賦值的方式爲:
1)、在聲明的同時賦值
2) 、 在構造方法中賦值
5. 能夠與static一塊兒修飾實例變量,則爲常量。全部字母大寫。
6. final修飾局部變量
僅賦值一次。
7. final修飾的引用類型的變量
不能引用新的對象。可是所引用的對象的內容能夠改變。
(抽象類):
一、爲何使用抽象類?
某些類建立對象後,沒有具體的含義(寵物,形狀),所以把這些類聲明爲抽象類。
二、如何定義類爲抽象類?
在定義類時添加:abstract 修飾符
三、抽象類的特色
3.1 抽象類不能實例化對象
3.2 抽象類必須被子類繼承。
3.3 抽象類的引用能夠引用子類對象。
四、什麼樣的方法能夠定義爲抽象方法
父類中的某些方法,各個子類各有不一樣的實現方式時,把父類中的此方法聲明爲抽象方法。
五、抽象方法的特色
語法: 訪問修飾符 abstract 返回值類型 方法名(參數列表 );
特色:
1) 抽象方法沒有方法體。
2)抽象方法必須被子類重寫。若是子類不重寫抽象方法,則子類聲明爲抽象類
3)包含抽象方法的類必須聲明爲抽象類。
六、抽象類和抽象方法
1)抽象類中能夠有抽象方法,也能夠沒有抽象方法。
2)抽象方法必須聲明在抽象類中
七、abstract修飾方法時的注意事項
7.1 不能修飾私有方法
7.2 不能修飾靜態方法
7.3 不能與final一塊兒修飾成員方法
八、抽象類示例:
類圖: