Java多態機制的特色

class AP{
	public AP() {
		g();//這裏到底會調用哪一個函數呢》是父類AP的,仍是子類A
	}
	
	public void f() {
		System.out.println("AP f()");
	}
	public void g() {
		System.out.println("AP g()");
	}
	
}

public class A extends AP{

	@Override
	public void f() {
		System.out.println("A f()");
	}
	
	@Override
	public void g() {
		System.out.println("A g()");
	}
	
	public static void main(String[] args) {
		AP instance  = new A();
		instance.f();
		instance.g();
	}
}


這個的輸出結果爲:java

A g()
A f()
A g()

結果分析:
運行結果告訴咱們,在建立子類時,同時也會調用父類的構造函數,
但,當咱們在構造函數 public AP()中調用g()時,代碼運行的是
子類中覆蓋的g()方法。

原理:
這個是因爲java的動態綁定機制致使的,(綁定指的是講一個方法調用和一個方法主體鏈接
到一塊兒),就是引用變量所指向的具體實例對象的方法,也就是內存里正在運行的那個對象
方法。由於此時內存中存在的對象爲 A class,因此在AP() {g();} 這裏調用的g()方法
實體爲    @Override
	public void g() {
		System.out.println("A g()");
	}


補充:程序員

只有類中的方法纔有多態的概念,類中的成員沒有,下面舉個例子
class AP{
	public String string = "AP";
}

public class A extends AP{
	public String string = "A";
	public static void main(String[] args) {
		AP instance  = new A();
		System.out.println(instance.string);
	}
}

這段代碼的輸出結果爲:面試

AP//而不是 A

參考資料:《Java程序員面試筆試》
ide

相關文章
相關標籤/搜索