1. 程式人生 > >java學習筆記之面向對象多態

java學習筆記之面向對象多態

成員變量 clas 創建 無法 復用 xtend 數據類型 需要 類重寫

面向對象三大特性之多態

一.多態的概念

  多態是繼封裝,繼承之後,面向對象的三大特性。

  現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的張三同學既是學生也是人,即出現兩種形態。

  java作為面向對象的語言,同樣可以描述一個事物的多種形態,java中多態的代碼體現在一個子類對象(實現類對象)既可以給這個子類(實現類對象)引用變量賦值,又可以給這個子類(實現類對象)的父類(接口) 變量賦值。

  父類的引用變量指向子類對象。多態的前提需要有繼承關系或者是實現關系,否則沒法完成多態。在使用多態後的父類引用變量調用方法時,會調用子類重寫的;

二.多態的定義與使用

  多態的定義格式:就是父類的引用變量指向子類的對象;

    父類類型變量名 = new 子類對象();

    變量名.方法名();

  1.普通類的多態定義格式:

    父類類型變量名 = new 子類();

1 public class Fu {}
1 public class Zi extends  Fu{}
1 //多態使用
2 Fu  f= new Zi();

  2.抽象類多態的定義:

  抽象類變量名 =new 抽象類子類();

//抽象類
public abstract  class  Fu{

  public abstract  void method();  
}
//子類
public class
Zi extends Fu{ public void method(){//重寫抽象方法} }
//多態的使用
Fu f=new Zi();

  3.接口多態定義的格式:

   接口變量名 =new 接口實現類();

  

//接口
public
interface Fu{ public abstract void method(); }
//實現類
public Zi  implements Fu{

   public void method(){
       //重寫接口的抽象方法
    }
}
//多態
Fu  f=new  Zi();

註意:雖然變量指向子類的對象,但表現的是一個父類的形態,可以調用一切父類的方法,子類特有的方法將不能調用

三.多態調用的註意事項:

  編譯:成員變量,成員方法都需要看父類;父類沒有編譯報錯;

  運行:成員變量運行父類的成員變量,成員方法運行父類重寫的方法

四.多態的好處與弊端

  好處:多態配合繼承子類重寫,提高了代碼的復用性與擴展性

  弊端:不能調用子類特有的方法

五.向上向下類型轉換

  多態本身是子類類型向父類類型向上轉型的過程;

  1.向上轉型:

    當子類的對象賦值給一個父類的引用時,便是向上轉型,多態本身就是向上轉型的過程

    使用格式:父類類型 變量名= new 子類類型();

  2.向下轉型:

    一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類的引用轉換為子類引用,這個過程是向下轉型。直接創建父類對象的無法使用向下轉型;

    使用格式:

    子類類型 變量名= (子類類型) 父類類型的變量;

六.instanceof 關鍵字

  可以通過instanceof關鍵字來判斷某個對象是否屬於某種數據類型;

  使用格式:

     boolean b= 對象(new ) instanceof 數據類型;

java學習筆記之面向對象多態