JAVA - 函數重載和重寫
1. 函數重載(OverLoding)
概念:同名函數具有不同的參數列表。
作用:實現單個類內部的多態性,是靜態多態。
注意點:
(1) 參數類型、個數、順序至少有一個不相同。
(2) 不能通過訪問權限、返回類型、拋出的異常進行重載。
2. 函數重寫(OverRideing)
概念:在子類中定義某個方法與其父類有相同的名稱和參數;子類對象引用或者子類對象的父類引用使用這個方法時,將調用子類中的定義。
作用:在繼承中實現多態性,是父類與子類之間多態性的表現。
注意點:
(1) 方法名、參數、返回值必須相同。
(2) 子類方法不能縮小父類方法的訪問權限。
(3) 子類方法不能拋出比父類更多的異常(子類可以不拋出異常)。
(4) 被定義爲final的方法不能被重寫。
3. 判斷對象引用能否調用一個方法的原則
(1) 向上轉型:子類轉型成父類型。
(2) 子類對象引用:方法存在子類定義中則可以調用,否則不可以調用。
(3) 父類對象引用:方法存在父類定義中則可以調用,調用結果根據多態性原則;否則不可以調用。
// Animal類 public class Animal { public void introduce(){ System.out.println("I am an animal!"); } }
// Cat類 public class Cat extends Animal { //重寫了父類的introduce,實現了overriding public void introduce(){ System.out.println("I am a cat!"); } //實現了Overloading public void introduce(String name){ System.out.println("I am a cat, My name is : " + name); } }
// Dog類 public class Dog extends Animal { //重寫了父類的introduce,實現了overriding public void introduce(){ System.out.println("I am a dog!"); }
//實現了Overloading public void introduce(String name){ System.out.println("I am a dog, My name is : " + name); } }
// 測試類 public class Test { public static void main(String[] args) { //Overriding是父類與子類之間多態性的一個表現 Animal animal1 = new Animal(); Animal animal2 = new Cat(); Animal animal3 = new Dog(); animal1.introduce(); animal2.introduce(); animal3.introduce(); // animal2.introduce("JACK"); 是錯誤的用法 // animal3.introduce("JACK"); 是錯誤的用法 //Overloading是在一個類中多態性的體現 Cat cat = new Cat(); cat.introduce(); cat.introduce("JACK"); } } |