關于動態綁定的理解

發表于:2007-07-14來源:作者:點擊數: 標簽:
看了翁愷的 Java 的教程突然有了點想法,也不知道是否正確! 動態綁定 在子類和父類里面有同名函數的時候,如果生成一個子類的對象,并在子類的對象里面 調用這個函數,那么到底會是調用的是誰的函數呢?例如 class Base{ int i=47; int f(){ return g(); }
看了翁愷的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具備多態性的關鍵

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97