一:方法的重載 (1)方法重載指在類中定義方法名相同,參數不同的不同的多個方法(返回值類型可隨意,不能以返回類型作為重載函數的區分標準)。 參數不同表現: 1.參數的個數不同 2.參數的類型不同 二:重寫 定義:如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫 (1) 子類繼承父 ...
一:方法的重載
(1)方法重載指在類中定義方法名相同,參數不同的不同的多個方法(返回值類型可隨意,不能以返回類型作為重載函數的區分標準)。
參數不同表現:
1.參數的個數不同
2.參數的類型不同
public class Test {
//構造方法 public Test(){ } //構造方法的重載 public Test(Object obj){ }
//普通方法
public String info(Object obj1){ return "s"; }
//普通方法的重載
public String info(Object obj1,Object obj2){ return "obj"; } }
二:重寫
定義:如果在子類中定義某方法與其父類有相同的名稱和參數,我們說該方法被重寫
(1) 子類繼承父類具有父類中所有方法,除了被private和protected修飾符所修飾的方法。但是有時子類並不想原封不動地繼承父類的方法,而是想作一定的修改,這就需要採用方法的重寫。
方法重寫又稱方法覆蓋。
(2)若子類中的方法與父類中的某一方法具有相同的方法名、返回類型和參數表,則新方法將覆蓋原有的方法。
如需父類中原有的方法,可使用super關鍵字,該關鍵字引用了當前類的父類。
(3)子類函數的訪問修飾許可權不能少於父類的;
多態經典案列:
在繼承鏈中對象方法的調用存在一個優先順序:this.show(O)、super.show(O)、this.show((super)O)、super.show((super)O)
public class A { public String show(D obj) {return ("A and D"); } public String show(A obj) {return ("A and A"); } } public class B extends A { public String show(B obj) {return "B and B";} public String show(A obj) {return "B and A";} } public class C extends B{} public class D extends B{}
//測試類 A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.println("1--" + a1.show(b)); System.out.println("2--" + a1.show(c)); System.out.println("3--" + a1.show(d)); System.out.println("4--" + a2.show(b)); System.out.println("5--" + a2.show(c)); System.out.println("6--" + a2.show(d)); System.out.println("7--" + b.show(b)); System.out.println("8--" + b.show(c)); System.out.println("9--" + b.show(d));
總結:
重載與重寫是 Java 多態性
的不同表現。
重寫是父類與子類之間多態性的表現,在運行時起作用(動態多態性,譬如實現動態綁定)
而重載是一個類中多態性的表現,在編譯時起作用(靜態多態性,譬如實現靜態綁定)