java的前期繫結和後期繫結使用示例

NO IMAGE

後期繫結,是指在執行時根據物件的型別進行繫結,又叫動態繫結或執行時繫結。實現後期繫結,需要某種機制支援,以便在執行時能判斷物件的型別,呼叫開銷比前期繫結大。
Java中的static方法和final方法屬於前期繫結,子類無法重寫final方法,成員變數(包括靜態及非靜態)也屬於前期繫結。除了static方法和final方法(private屬於final方法)之外的其他方法屬於後期繫結,執行時能判斷物件的型別進行繫結。驗證程式如下:

複製程式碼 程式碼如下:
class Base
{
    //成員變數,子類也有同樣的成員變數名
    public String test=”Base Field”;
    //靜態方法,子類也有同樣簽名的靜態方法
    public static void staticMethod()
    {
        System.out.println(“Base staticMethod()”);
    }
    //子類將對此方法進行覆蓋
    public void notStaticMethod()
    {
        System.out.println(“Base notStaticMethod()”);
    }

}
public class Derive extends Base
{
    public String test=”Derive Field”;
    public static void staticMethod()
    {
        System.out.println(“Derive staticMethod()”);
    }
    @Override
    public void notStaticMethod()
    {
        System.out.println(“Derive notStaticMethod()”);
    }
    //輸出成員變數的值,驗證其為前期繫結。
    public static void testFieldBind(Base base)
    {
        System.out.println(base.test);
    }
    //靜態方法,驗證其為前期繫結。
    public static void testStaticMethodBind(Base base)
    {
        //The static method test() from the type Base should be accessed in a static way
        //使用Base.test()更加合理,這裡為了更為直觀的展示前期繫結才使用這種表示。
        base.staticMethod();
    }
    //呼叫非靜態方法,驗證其為後期繫結。
    public static void testNotStaticMethodBind(Base base)
    {
        base.notStaticMethod();
    }
    public static void main(String[] args)
    {
        Derive d=new Derive();
        testFieldBind(d);
        testStaticMethodBind(d);
        testNotStaticMethodBind(d);
    }
}
/*程式輸出:
Base Field
Base staticMethod()
Derive notStaticMethod()
 */

您可能感興趣的文章:

XML到Java程式碼的資料繫結之物件javascrpt繫結事件之匿名函式無法解除繫結問題Java中的靜態繫結和動態繫結詳細介紹詳解Java多型物件的型別轉換與動態繫結例項解析Java的Jackson庫中的資料繫結解析Java的Jackson庫中物件的序列化與資料泛型繫結理解Java中的靜態繫結和動態繫結