您好,登錄后才能下訂單哦!
如何在java中使用動態綁定和靜態綁定?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Java的基本數據類型分為:1、整數類型,用來表示整數的數據類型。2、浮點類型,用來表示小數的數據類型。3、字符類型,字符類型的關鍵字是“char”。4、布爾類型,是表示邏輯值的基本數據類型。
綁定
綁定:將一個方法的調用與方法所在的類(方法主體)關聯起來。即決定調用哪個方法和變量。
在java中,綁定分為靜態綁定和動態綁定。也叫作前期綁定和后期綁定。
靜態綁定
在程序執行以前已經被綁定(即在編譯過程中就已經知道這個方法到底是哪個類中的方法)。
java當中的方法只有final、static、private修飾的的方法和構造方法是靜態綁定的。
private修飾的方法:private修飾的方法是不能被繼承的,因此子類無法訪問父類中private修飾的方法。所以只能通過父類對象來調用該方法體。因此可以說private方法和定義這個方法的類綁定在了一起。
final修飾的方法:可以被子類繼承,但是不能被子類重寫(覆蓋),所以在子類中調用的實際是父類中定義的final方法。(使用final修飾方法的兩個好處:(1)防止方法被覆蓋;(2)關閉java中的動態綁定)。
static修飾的方法:可以被子類繼承,但是不能被子類重寫(覆蓋),但是可以被子類隱藏。(這里意思是數哦如果父類里有一個static方法,它的子類里如果沒有對應的方法,那么當子類對象調用這個方法時就會使用父類中的方法,而如果子類中定義了相同的方法,則會調用子類中定義的方法,唯一的不同就是:當子類對象向上類型轉換為父類對象時,不論子類中有沒有定義這個靜態方法,該對象都會使用父類中的靜態方法,因此這里說靜態方法可以被隱藏而不能被覆蓋。這與子類隱藏父類中的成員變量是一樣的。隱藏和覆蓋的區別在于,子類對象轉換成父類對象后,能夠訪問父類被隱藏的變量和方法,而不能訪問父類被覆蓋的方法)。
構造方法:構造方法也是不能被繼承的(因為子類是通過super方法調用父類的構造函數,或者是jvm自動調用父類的默認構造方法),因此編譯時也可以知道這個構造方法方法到底是屬于哪個類的。
因此,一個方法被繼承,或者是被繼承后不能被覆蓋,那么這個方法就采用靜態綁定
動態綁定
在運行時期根據具體對象的類型進行綁定。
若一種語言實現了后期綁定,同時必須提供一些機制,可在運行期間判斷對象的類型,并分別調用適當的方法。也就是說,編譯器此時依然不知道對象的類型,但方法調用機制能自己去調查,找到正確的方法主體。不同的語言對后期綁定的實現方法是有所區別的,但我們至少可以這樣認為:它們都要在對象中安插某些特殊類型的信息。
動態綁定的過程:
1.虛擬機提取對象實際類型的方法表
2.虛擬機搜索方法簽名
3.調用方法
java中重載的方法使用靜態綁定,重寫的方法使用動態綁定。
實驗
package practice; public class Bind{ public static void main(String[] args) { Child c = new Child(); Parent p = c; System.out.println(p.getPristr()); System.out.println(c.pristr); c.print(); p.print(); c.print1(); p.print1(); c.print2(); p.print2(); } } class Parent{ private String pristr = "parent private string"; String pubstr = "public string"; public String getPristr() { return pristr; } public void setPristr(String pristr) { this.pristr = pristr; } public Parent() { System.out.println("parent構造函數"); } final public void print() { System.out.println("parent的print"); } public static void print1() { System.out.println("parent的print1"); } public void print2() { System.out.println("parent的print2"); } } class Child extends Parent{ String pristr = "child private string"; String pubstr = "public string"; public Child() { System.out.println("child構造函數"); } public static void print1() { System.out.println("child的print1"); } public void print2() { System.out.println("child的print2"); } }
結果
parent構造函數
child構造函數
parent private string
child private string
parent的print
parent的print
child的print1
parent的print1
child的print2
child的print2
看完上述內容,你們掌握如何在java中使用動態綁定和靜態綁定的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。