建立子類後的呼叫順序
構造器呼叫順序
多型
this.method(o) > super.method(o) > this.method((super)o) > super.method((super)o)
注意:如果某個方法是靜態的,那麼這個方法就不具有多型性。
class a
a()public void fun()
public void fun(a a)
}class b extends a
b();
public void fun()
public void fun(a a)
}class c extends b
c();
//public void fun()
//public void fun(a a)
}public class orderofclassinvoking
}
執行結果:
解釋:c.fun(a)
這裡this
代表a
,因此到a類中尋找fun(a a)
, 同時由於b類覆蓋了a類的fun(a a)
,因此輸出b fun(a)
。
public class a
public string show(a obj)
}public class b extends a
public string show(a obj)
}public class c extends b
public class d extends b
public class test
}
輸出:
1--a and a
2--a and a
3--a and d
4--b and a
5--b and a
6--a and d
7--b and b
8--b and b
9--a and d
java中子類繼承父類程式執行順序
我們經常在專案中使用繼承,但是往往不太明白,程式執行的順序以及原理,尤其是使用上轉型物件的時候,以及父類子類中都有static變數和方法時,不知道先執行誰。下面是乙個簡單的繼承,來檢視 的執行順序 package test class person person class student exte...
java中子類繼承父類程式執行順序問題
public class fathertest public fathertest string name static public void speak 加入乙個main程式後 public static void main string args 結果 可以很明顯的看出來執行順序 靜態 塊 主...
java中子類繼承父類方法及呼叫規則
有時候我們會遇到這種情況 父類中有方法a和方法b,方法a中呼叫了方法b。某類繼承該類,重寫了方法b,但沒有對方法a進行重寫。那麼在用子類的例項呼叫該方法a時,最終會執行哪乙個方法b呢?我們可以寫一段簡單的程式驗證一下。class a void printword class b extends a ...