java 函數的重載和重寫實例代碼。本站提示廣大學習愛好者:(java 函數的重載和重寫實例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是java 函數的重載和重寫實例代碼正文
在java中多態分為兩種編譯時多態(重載)和運轉時多態(重寫),編譯時多態又叫前綁定,運轉時多態又叫後綁定。
上面用一個例子闡明:
public class OverloadAndOverwrite { public static void main(String[] args) { A a1 = new A(); A a2 = new B(); B b = new B(); C c = new C(); D d = new D(); System.out.print("a1.print(a1): "); a1.print(a1);//輸入A and A System.out.print("a1.print(b): "); a1.print(b);//輸入A and A:緣由是由於A中不存在參數為B的辦法,因而會調用參數為A的辦法,由於B是承繼自A的 System.out.print("a1.print(c): "); a1.print(c);//輸入A and A:緣由是由於A中不存在參數為C的辦法,因而會調用參數為A的辦法,由於C是承繼自B的,B是承繼自A的 System.out.print("a1.print(d): "); a1.print(d);//輸入A and D:緣由是由於A中存在參數為D的辦法,因而會調用參數為D的辦法 System.out.print("a2.print(b): "); a2.print(b);//輸入B and A:緣由在於首先入口是A,首先檢查A中能否有參數為B的print辦法,發現沒有那就尋覓有沒有參數為A的辦法,由於B是承繼自A的,發現存在這樣的辦法,那麼再次檢查B中有沒有重寫這個辦法,發現有重新,直接調用B中這個重寫的辦法 System.out.print("a2.print(c): "); a2.print(c);//輸入B and A:緣由在於首先入口是A,首先檢查A中能否有參數為C的print辦法,發現沒有那就尋覓有沒有參數為B的辦法,由於C是承繼自B的,發現也不存在這樣的辦法,那就尋覓存在參數為A的print辦法,由於B承繼自A,發現存在這樣的辦法,那麼再次檢查B中有沒有重寫這個辦法,發現有重新,直接調用B中這個重寫的辦法 System.out.print("a2.print(d): "); a2.print(d);//輸入 A and D:緣由在於入口是A,檢查A中存在參數為D的辦法,再次檢查B中沒有重寫這個辦法,因而輸入A中這個辦法的後果即可; System.out.print("a2.print(a2): "); a2.print(a2);//輸入B and A;緣由在於a2的類型是A,因而會調用A外面參數為A的print辦法,但是a2左邊new的是B,所以由於B中有參數為A的辦法,因而采用的是B外面的這個辦法 System.out.print("b.print(b): "); b.print(b);//輸入B and B;緣由:入口是B,因而檢查B中存不存在參數為B的print函數,存在則直接輸入; System.out.print("b.print(c): "); b.print(c);//輸入B and B;緣由:入口是B,因而檢查B中存不存在參數為C的print函數,發現不存在,則檢查存不存在參數為B的print函數,發現存在,並且C中並沒有重寫該辦法,則直接輸入;有一點需求留意的是還需求檢查一下A中能否存在參數為C的print辦法,由於B承繼自A,有的話會及效果來這個辦法,這樣的話輸入的後果將變為A and C System.out.print("b.print(d): "); b.print(d);//輸入A and D;緣由:入口是B,雖然B中不存在參數為D的print函數,但是B承繼自A,A中是存在參數為D的print函數的,因而輸入的是A中參數為D的後果; } } class A { public void print(A a) { System.out.println("A and A"); } public void print(D d) { System.out.println("A and D"); } // public void print(C c) // { // System.out.println("A and C"); // } } class B extends A { public void print(B b) { System.out.println("B and B"); } public void print(A a) { System.out.println("B and A"); } } class C extends B{} class D extends C{}
在此需求闡明的是:
關於 A a2 = new B( );
假如獨自打印出a2的話,打印後果是B@(hash碼),而不是A@(hash碼),但這並不能闡明a2的類型是B類型的,由於當我們在下面順序中調用a2.print(a2);的時分輸入的後果是B and A而不是A and A(假如假定a2是B類型的話,就應該調用A類中參數為B的print辦法,由於不存在這樣的辦法,那麼退而求其次調用參數為A的辦法就應該輸入A and A了,由於B是A的子類)。
以上就是對重寫和重載的實例代碼剖析,希望對Java學習的同窗有協助。