今天在老師和同學的幫助下,瞭解了一個比較重要的知識點,可能比較簡單,但是我還是非常想和大家分享下的。
就是java裏的靜態和動態綁定的問題。
2句話。今天剛學的
方法動態綁定到變量上,
屬性靜態綁定到對象類型上。
怎麼理解?
寫段簡單的代碼,讓大家能夠比較好的理解。
定義2個類作測試
class Foo{
int a=1;
public void a(){
System.out.println(1);
}
public static void b(){
System.out.println(3);
}
}
class Koo extends Foo{
int a=2;
public void a(){
System.out.println(2);
}
public static void b(){
System.out.println(4);
}
}
主函數
public static void main (String[] args){
Foo foo=new Koo();
System.out.println(foo.a);
//屬性靜態綁定到對象類型上,foo對象類型是Foo,所以輸出1
foo.a();
//方法動態綁定到變量上,變量foo指向的是Koo實例對象,所以變量的a方法其實是指Koo的a方法
//所以輸出2;
foo.b();
//這樣寫是有警告的,因爲b是靜態方法,應該用類名直接調用,但是這樣寫沒錯
//這種題也會被別人出出來刁難你
//靜態方法和屬性是一樣的,靜態綁定到對象類型上
//因爲foo是Foo類型的,所以輸出3;
}
雖然比較簡單,但是初學者往往會在這種問題上搞混,單單記住上面2句話是沒用的,你要仔細去理解。