程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 函數的重載和重寫實例代碼

java 函數的重載和重寫實例代碼

編輯:關於JAVA

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學習的同窗有協助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved