Java面向對象(四)

一:多態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一塊兒修飾成員方法

八、抽象類示例:

類圖:

相關文章
相關標籤/搜索