程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 關於動態綁定的理解

關於動態綁定的理解

編輯:JAVA編程入門知識

  在子類和父類裡面有同名函數的時候,如果生成一個子類的對象,並在子類的對象裡面調用這個函數,那麼到底會是調用的是誰的函數呢?例如

  

class Base{
int i=47;
int f(){
return g();
}
int g(){
return i;
}

class Dervied extends Base{
int i=27;
int g(){ file://override父類裡面的方法
return i;
}
}
public class test {
public static void main (String[] args)
{
Derived d = new Derived(); //生成Derived的對象
System.out.println(d.f());
// d.f() === Derived.f(d);
}
}

  d.f()等價於==對象d調用父類的f()函數,f()函數就會調用return g()這句話,這個時候是在調用誰的g()呢?

  這個時候需要動態綁定 Binding,所謂的動態綁定,通俗的就是指,對象在調用方法的時候能夠自己判斷改調用誰的方法是自己的方法還是父類的方法,到底怎樣判斷呢?我覺得不是很好的理解所以干脆也來個通俗的解釋:

  即 就是調用當前對象的所在類的裡面的方法:

  如果從當前子類Dervied生成了對象d, 那麼以後只要是是調用g()的時候,都會是調用子類Derived裡面的g()函數而不會去調用父類Base裡面的g()函數我覺得這裡就是Java具備多態性的關鍵

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved