關於 java 的動態綁定機制
關於 java 的動態綁定機制
聊一聊動態綁定機制, 相信看完這篇文章,你會對動態綁定機制有所了解。
網上大多一言概括:
當調用對象的時候,該方法會和該對象的記憶體地址/運行類型綁定。
當調用對象的屬性時,沒有動態綁定機制,哪裡聲明就使用哪裡。
這裡我們展開來說一說。
動態綁定機制,簡單來說,就是在以父類為編譯類型,創建子類對象的時候,綁定子類運行類型,當我們再調用方法的時候,能夠有序的尋找方法,實現方法的有序調用。
動態綁定機制會出現在多態中,多態是 Java 的重要的三個屬性之一,動態綁定機制就是建立在,封裝,多態,繼承的基礎上延伸出的。
要了解動態綁定機制,首相要把對象的多態與繼承搞明白,還有編譯類型,運行類型,這是前提。網上都有詳細的講解,這裡不做延伸。
廢話不多書,直接上程式碼演示講解,詳細的講解會在程式碼的注釋當中。
首先我們要創建父類 Person 類
//創建父類
public class Person {
//簡單的創建兩個屬性
private String name;
private int age;
//創建行為方法,方法中調用創建的say方法
public void haviours(){
say();
}
//創建方法
public void say(){
System.out.println("我是人類!!!");
}
}
創建子類 Student
//創建子類
public class Student extends Person {
//創建學生的屬性
private int score;
//重寫行為
public void haviours(){
say();
}
//重寫say方法
public void say(){
System.out.println("我是學生!!!");
}
}
首先我們對 say 方法進行調用。
public class Demo01 {
public static void main(String[] args) {
//創建學生
Person student = new Student();
//調用學生的say()方法,由於我們的編譯類型是Person類,而運行類型是Student類,而動態綁定機制是綁定運行類型。
//所以,當我們調用say()方法時,是調用Student類的say()方法
student.say();//返回「我是學生」
//、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
//如果我們將student類的say()方法註銷,他尋找student類的say方法無果後,會再向它的父類調用say方法。返回我是人類,效果等同於
}
}
但是,重點來了。。。。。。。。。。。。
如果我們調用的是 haviours 方法,那麼他的方法是調用什麼呢
public class Demo02 {
public static void main(String[] args) {
//創建學生
Person student = new Student();
//調用學生的haviours方法,由於我們的編譯類型是Person類,而運行類型是Student類,而動態綁定機制是綁定運行類型。
//所以,當我們調用haviours()方法時,該對象綁定的是Student類,所以是調用Student類的say()方法
student.haviours();//返回我是學生!!!
}
}
但是,還有人可能會有疑問,如果 Student 類中的 havious 方法被注釋掉呢,你是不是會想。子類 Student 中沒有 havious 方法,調用父類的 havious 方法,然後 havious 調用父類的 say 方法???
抱歉了,他調用的是子類 Student 的 Say 方法
public class Demo03 {
public static void main(String[] args) {
//創建學生
Person student = new Student();
//調用學生的haviours方法,由於我們的編譯類型是Person類,而運行類型是Student類,而動態綁定機制是綁定運行類型。
//所以,當我們調用haviours()方法時,由於子類沒有havious方法,調用父類的havious方法,在父類的havious中,調用say方法,這時,動態綁定機制是綁定運行類型。該對象綁定的是Student類,所以是調用Student類的say()方法
student.haviours();//返回我是學生!!!
}
}
介紹完動態邦迪機制對方法的綁定,接下來說一說對屬性的影響。
當調用對象的屬性時,沒有動態綁定機制,哪裡聲明就使用哪裡。這句話十分容易理解。
也就是動態綁定機制對屬性沒有影響,放心調用。
動態綁定機制(完)。
結語:由於在網上查找相關的動態綁定機制時,看到沒有動態綁定的詳細講解,而這也是一個小難點,所以翻閱書籍,進行了學習,並進行總結,世界上本沒有路,走的人多了,也便有了路。
有興趣可以加QQ一起討論:3282300758