動(dòng)態(tài)綁定 在子類和父類里面有同名函數(shù)的時(shí)候,假如生成一個(gè)子類的對(duì)象,并在子類的對(duì)象里面 調(diào)用這個(gè)函數(shù),那么到底會(huì)是調(diào)用的是誰的函數(shù)呢?例如 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的對(duì)象 System.out.PRintln(d.f()); // d.f() === Derived.f(d); } } d.f()等價(jià)于==對(duì)象d調(diào)用父類的f()函數(shù),f()函數(shù)就會(huì)調(diào)用return g()這句話,這個(gè)時(shí)候是在調(diào)用誰的g()呢? 這個(gè)時(shí)候需要?jiǎng)討B(tài)綁定 Binding,所謂的動(dòng)態(tài)綁定,通俗的就是指,對(duì)象在調(diào)用方法的時(shí)候能夠自己判定改調(diào)用誰的方法 是自己的方法還是父類的方法, 到底怎樣判定呢?我覺得不是很好的理解所以干脆也來個(gè)通俗的解釋: 即 就是調(diào)用當(dāng)前對(duì)象的所在類的里面的方法: 假如從當(dāng)前子類Dervied生成了對(duì)象d, 那么以后只要是是調(diào)用g()的時(shí)候,都會(huì)是調(diào)用子類Derived里面的g()函數(shù) 而不會(huì)去調(diào)用 父類Base里面的g()函數(shù)