歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 【Simple Java】Java編譯器如何生成重載和覆蓋方法代碼

【Simple Java】Java編譯器如何生成重載和覆蓋方法代碼

日期:2017/3/1 9:16:05   编辑:Linux編程

下面是一個很簡單的例子,關於Java中的多態:方法重載和方法覆蓋;

多態指的是方法在不同的時刻表現出不同的形式;在編譯期間,這被叫做方法重載;方法重載允許相關的方法被同一個方法名字調用,這有時候被叫做ad-hoc polymorphism;

package simplejava;

class A {
public void M(int i) {
System.out.println("int");
}

public void M(String s) {
// this is an overloading method
System.out.println("string");
}
}

class B extends A {
public void M(int i) {
// this is overriding method
System.out.println("overriden int");
}
}

public class Q13 {

public static void main(String[] args) {
A a = new A();
a.M(1);
a.M("abc");
A b = new B();
b.M(1234);
}

}

那麼對於編譯器來說,如何生成方法代碼以便能被正確調用呢?

靜態重載的實現並不難,當處理重載方法聲明的時候,將他們綁定到不同的實現,在類型檢查的時候,編譯器分析參數類型來決定哪個方法被調用;

動態重載允許在運行期間根據實際參數類型來選擇不同的方法實現,這是動態分發(dynamic dispatch)的一種形式;

動態分發(dynamic dispatch)同樣可以用於實現方法覆蓋,被覆蓋的方法的調用由運行期間實際對象的類型來決定;

Copyright © Linux教程網 All Rights Reserved