13 Java學習筆記 物件導向07 多型

2021-07-26 04:53:24 字數 2776 閱讀 7345

多型

某乙個事物,在不同時刻表現出來的不同狀態。

舉例:--| 貓可以是貓的型別。 貓 m = new 貓();

--| 同時貓可以是動物型別,也可以把貓稱為動物。  動物  d = new 貓();

貓這類事物即具備貓的形態,又具備著動物的形態。

class 動物	//父類

class 貓 extends 動物 //子類

class 狗 extends 動物

貓 x = new 貓;

動物 x = new 貓; //父類指向子物件,體現出多型性

多型的前提:

1/多型要有繼承關係

2/必須要有重寫(不重寫就沒意義)

3/ 要有父類引用指向子類物件。(父類 f = new 子類();

範例:

class fu

}class zi extends fu //前提①:zi類繼承父類

}class duotaidemo

}

多型中的成員訪問特點:

1 / 成員變數

編譯看左邊,執行看左邊。(變數看的父類的)

2 / 構造方法

建立子類物件的時候,訪問父類的構造方法,對父類的資料進行初始化。

3 / 成員方法

編譯看左邊,執行看右邊。(因為方法重寫,父類方法被子類覆蓋,只留下子類方法)

4 / 靜態方法

編譯看左邊,執行看左邊。(靜態方法算不上重寫,靜態和類相關,所以訪問的還是左邊)

由於成員方法存在方法重寫,所以執行看右邊。

多型的好處:

1 / 提高了**的維護性(用繼承保證)

2 / 提高了**的擴充套件性,前期定義的**可以使用後期的內容。(由多型保證)

範例:

/*

通過動物來示範多型的擴充套件性

*/class animal //定義乙個animal父類

public void sleep() }

class cat extends animal //定義乙個cat類繼承anamal類

public void sleep() //重寫父類方法 }

class dog extends animal //定義乙個dog類繼承anamal類

public void sleep() //重寫父類方法 }

/*可以不斷定義新的動物,繼承父類animal的共性,提高了擴充套件性

*/class animaltool //定義乙個animal工具類,呼叫物件方法

public static void useanimal(animal a) //定義乙個靜態animal帶animal引數的方法 }

class duotaidemo_02

}

多型的弊端(侷限性):

不能使用子類的特有功能。

需要用到子類特有功能時可以用的方法:

a / 建立子類物件,呼叫子類方法。(但是不合理,實際是建立了兩個物件:fu f = new zi();     zi z = new zi();)

b / 把父類的引用強制轉換為子類引用。 (zi z = (zi) f;)

物件間轉型:

向上轉型:fu f = new zi();

**向上轉型的作用是限制對物件特有功能的訪問。

向下轉型:zi z = (zi)f;

**向下轉型的目的是為了使用子類中的特有方法。

範例:

class  duotime02

public static void method(animal a) //animal a 在不斷指向animal的子類物件,體現了子類物件的多型性 (animal a = new dog(); animal a = new cat();)

}abstract class animal //定義乙個抽象父類

class dog extends animal //定義乙個子類,繼承了父類

void lookhome() }

class cat extends animal

void catchmouse()

}

練習01:南北方人飲食案例

/*

南北方人案例

*/class person

public void eat()

}class southperson extends person

public void eat()

public void sell() }

class northperson extends person //定義北方人類,繼承perfon

public void eat()

public void work() //定義北方人特有方法 }

class duotaitest_01

}

型別判斷 關鍵字 intanceof(通常在向下轉型前用於**健壯性的判斷)

instanceof 用於判斷物件的具體型別,只能用於醫用資料型別判斷。

示例: if ( a instanceof cat)

java物件導向學習筆記

1.類和物件 類可以看成是一類物件的模板,物件可以看成是該類的乙個具體例項.2.類 物件 之間的關係 聚合,繼承,實現,多型.3.記憶體區分 類是靜態概念,區 物件是new出來的,位於堆記憶體 4.構造方法 函式 1 與類同名且沒有返回值 2 用來初始化物件的函式 3 new 構造方法,建立乙個新的...

JAVA學習筆記 物件導向

寫類要重寫equals和hashcode,在類當作map中的key 鍵 時,一定要重寫hashcode,map中的鍵需要使用equals方法,該方法中呼叫了hashcode判斷是否相同。類中成員變數未手動初始化,虛擬機會自動進行初始化。而區域性變數不能自動初始化,提示該變數未初始化。public c...

java 學習筆記 物件導向(繼承)

將學生與工人的共性描述提取出來,單獨進行描述,只要讓學生和工人單獨描述這個類有關係,就可以了 繼承 1,提高了 的服用性。2,讓類與類之間產生了關係,有了這個關係,才有了多型的特性。注意 千萬不要為了獲取其他類的功能,簡化 而繼承。必須是類與類之間有所屬關係才可以繼承 class person st...