歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

下面是一個很簡單的例子,關於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