面向對象三大特性之多態 一.多態的概念 多態是繼封裝,繼承之後,面向對象的三大特性。 現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的張三同學既是學生也是人,即出現兩種形態。 java作為面向對象的語言,同樣可以描述一個事物的多種形態,java中多態的代碼體現在一個子類對象(實現類 ...
面向對象三大特性之多態
一.多態的概念
多態是繼封裝,繼承之後,面向對象的三大特性。
現實事物經常會體現出多種形態,如學生,學生是人的一種,則一個具體的張三同學既是學生也是人,即出現兩種形態。
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 數據類型;