資料內(nèi)容:
靜態(tài)綁定
在程序運行前,也就是編譯時期JVM就能夠確定方法由誰調(diào)用,這種機制稱為靜態(tài)綁定
識別靜態(tài)綁定的三個關鍵字以及各自的理解
如果一個方法由private、Static、final任意一個關鍵字所修飾,那么這個方法是前期綁定的
構造方法也是前期綁定
private:private關鍵字是私有的意思,如果被private修飾的方法是無法由本類之外的其他類所調(diào)用的,
也就是本類所特有的方法,所以也就由編譯器識別此方法是屬于哪個類的
public class Person {
private String talk;
private String canTalk(){
return talk;
}
}
class Animal{
public static void main(String[] args) {
Person p = new Person();
// private 修飾的方法是Person類獨有的,所以Animal類無法訪問(動物本來就不能說話)
// p.canTalk();
}
}
final:final修飾的方法不能被重寫,但是可以由子類進行調(diào)用,如果將方法聲明為final可以有效的關閉
動態(tài)綁定
public class Fruit {
private String fruitName;
final String eatingFruit(String name){
System.out.println("eating " + name);
return fruitName;
}
}
class Apple extends Fruit{
// 不能重寫final方法,eatingFruit方法只屬于Fruit類,Apple類無法調(diào)用
// String eatingFruit(String name){
// super.eatingFruit(name);
// }
String eatingApple(String name){
return super.eatingFruit(name);
}
}
static: static修飾的方法比較特殊,不用通過new出某個類來調(diào)用,由類名.變量名直接調(diào)用該方法,這
個就很關鍵了,new 很關鍵,也可以認為是開啟多態(tài)的導火索,而由類名.變量名直接調(diào)用的話,此時
的類名是確定的,并不會產(chǎn)生多態(tài),如下代碼:
public class SuperClass {
public static void sayHello(){
System.out.println("由 superClass 說你好");
}
}
public class SubClass extends SuperClass{
public static void sayHello(){
System.out.println("由 SubClass 說你好");
}
public static void main(String[] args) {
SuperClass.sayHello();
SubClass.sayHello();
}
}