最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java動態(tài)綁定和靜態(tài)綁定用法實例詳解

 更新時間:2019年05月20日 09:14:23   作者:XINGKONG_04  
這篇文章主要介紹了java動態(tài)綁定和靜態(tài)綁定用法,結(jié)合實例形式詳細分析了java動態(tài)綁定與靜態(tài)綁定相關(guān)概念、原理、實現(xiàn)方法及使用注意事項,需要的朋友可以參考下

本文實例講述了java動態(tài)綁定和靜態(tài)綁定用法。分享給大家供大家參考,具體如下:

背景

1.當子類和父類存在同一個方法,子類重寫了父類的方法,程序在運行時調(diào)用的是父類的方法還是子類的重寫方法呢(尤其是存在向上類型轉(zhuǎn)換的情況)?

2.當一個類中存在方法名相同但參數(shù)不同(重載)的方法,程序在執(zhí)行的時候該如何辨別區(qū)分使用哪個方法呢?

在java中存在綁定的機制解決以上疑問。

綁定

綁定:將一個方法的調(diào)用與方法所在的類(方法主體)關(guān)聯(lián)起來。即決定調(diào)用哪個方法和變量。

在java中,綁定分為靜態(tài)綁定和動態(tài)綁定。也叫作前期綁定和后期綁定。

靜態(tài)綁定

在程序執(zhí)行以前已經(jīng)被綁定(即在編譯過程中就已經(jīng)知道這個方法到底是哪個類中的方法)。

java當中的方法只有final、static、private修飾的的方法和構(gòu)造方法是靜態(tài)綁定的。

private修飾的方法:private修飾的方法是不能被繼承的,因此子類無法訪問父類中private修飾的方法。所以只能通過父類對象來調(diào)用該方法體。因此可以說private方法和定義這個方法的類綁定在了一起。

final修飾的方法:可以被子類繼承,但是不能被子類重寫(覆蓋),所以在子類中調(diào)用的實際是父類中定義的final方法。(使用final修飾方法的兩個好處:(1)防止方法被覆蓋;(2)關(guān)閉java中的動態(tài)綁定)。

static修飾的方法:可以被子類繼承,但是不能被子類重寫(覆蓋),但是可以被子類隱藏。(這里意思是數(shù)哦如果父類里有一個static方法,它的子類里如果沒有對應(yīng)的方法,那么當子類對象調(diào)用這個方法時就會使用父類中的方法,而如果子類中定義了相同的方法,則會調(diào)用子類中定義的方法,唯一的不同就是:當子類對象向上類型轉(zhuǎn)換為父類對象時,不論子類中有沒有定義這個靜態(tài)方法,該對象都會使用父類中的靜態(tài)方法,因此這里說靜態(tài)方法可以被隱藏而不能被覆蓋。這與子類隱藏父類中的成員變量是一樣的。隱藏和覆蓋的區(qū)別在于,子類對象轉(zhuǎn)換成父類對象后,能夠訪問父類被隱藏的變量和方法,而不能訪問父類被覆蓋的方法)。

構(gòu)造方法:構(gòu)造方法也是不能被繼承的(因為子類是通過super方法調(diào)用父類的構(gòu)造函數(shù),或者是jvm自動調(diào)用父類的默認構(gòu)造方法),因此編譯時也可以知道這個構(gòu)造方法方法到底是屬于哪個類的。

因此,一個方法被繼承,或者是被繼承后不能被覆蓋,那么這個方法就采用靜態(tài)綁定

動態(tài)綁定

在運行時期根據(jù)具體對象的類型進行綁定。

若一種語言實現(xiàn)了后期綁定,同時必須提供一些機制,可在運行期間判斷對象的類型,并分別調(diào)用適當?shù)姆椒?。也就是說,編譯器此時依然不知道對象的類型,但方法調(diào)用機制能自己去調(diào)查,找到正確的方法主體。不同的語言對后期綁定的實現(xiàn)方法是有所區(qū)別的,但我們至少可以這樣認為:它們都要在對象中安插某些特殊類型的信息。

動態(tài)綁定的過程:

1.虛擬機提取對象實際類型的方法表

2.虛擬機搜索方法簽名

3.調(diào)用方法

java中重載的方法使用靜態(tài)綁定,重寫的方法使用動態(tài)綁定。

實驗

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構(gòu)造函數(shù)");
 }
 
  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構(gòu)造函數(shù)");
 }
 
 public static void print1() {
 System.out.println("child的print1");
  }
 
 public void print2() {
   System.out.println("child的print2");
  }
}

結(jié)果

parent構(gòu)造函數(shù)
child構(gòu)造函數(shù)
parent private string
child private string
parent的print
parent的print
child的print1
parent的print1
child的print2
child的print2

更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對大家java程序設(shè)計有所幫助。

相關(guān)文章

  • Java之Spring整合Junit

    Java之Spring整合Junit

    Java Spring框架是一個輕量級的開源框架,具有很高的凝聚力和吸引力,本篇文章帶你了解如何配置數(shù)據(jù)源、注解開發(fā)以及整合Junit
    2023-04-04
  • java 異常之手動拋出與自動拋出的實例講解

    java 異常之手動拋出與自動拋出的實例講解

    這篇文章主要介紹了java 異常之手動拋出與自動拋出的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java模擬新浪和騰訊自動登錄并發(fā)送微博

    Java模擬新浪和騰訊自動登錄并發(fā)送微博

    這篇文章主要為大家詳細介紹了Java模擬新浪和騰訊自動登錄并發(fā)送微博功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-07-07
  • 淺談java封裝

    淺談java封裝

    封裝封裝就是將屬性私有化,提供公有的方法訪問私有的屬性。*實現(xiàn)封裝的步驟:(1)修改屬性的可見性來限制對屬性的訪問。(2)為每個屬性創(chuàng)建一對賦值方法和取值方法,用于對這些屬性的訪問。(3)在賦值和取值方法中,加入對屬性的存取限制。
    2015-03-03
  • SpringBoot+Vue跨域配置(CORS)問題得解決過程

    SpringBoot+Vue跨域配置(CORS)問題得解決過程

    在使用 Spring Boot 和 Vue 開發(fā)前后端分離的項目時,跨域資源共享(CORS)問題是一個常見的挑戰(zhàn),接下來,我將分享我是如何一步步解決這個問題的,包括中間的一些試錯過程,希望能夠幫助到正在經(jīng)歷類似問題的你
    2024-08-08
  • idea中解決maven包沖突的問題(maven helper)

    idea中解決maven包沖突的問題(maven helper)

    這篇文章主要介紹了idea中解決maven包沖突的問題(maven helper),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 淺析Java中的GC垃圾回收器的意義及與GC的交互

    淺析Java中的GC垃圾回收器的意義及與GC的交互

    這篇文章主要介紹了Java中的GC垃圾回收器的意義及與其的交互,GC是Java虛擬機JVM的一項重要特性,需要的朋友可以參考下
    2015-12-12
  • Java中的二維數(shù)組的賦值與輸出方式

    Java中的二維數(shù)組的賦值與輸出方式

    這篇文章主要介紹了Java中的二維數(shù)組的賦值與輸出方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決

    springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決

    這篇文章主要介紹了springboot 多數(shù)據(jù)源配置不生效遇到的坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 基于OpenCV與JVM實現(xiàn)矩陣處理圖像

    基于OpenCV與JVM實現(xiàn)矩陣處理圖像

    本文主要介紹了Java圖像處理實戰(zhàn)之基于OpenCV與JVM實現(xiàn)矩陣處理圖像。文中的示例代碼講解詳細,對我們學習圖像處理有一定的幫助,感興趣的可以試一試
    2022-01-01

最新評論

定州市| 襄樊市| 东阳市| 进贤县| 石门县| 平和县| 天祝| 明星| 白银市| 和静县| 永福县| 廊坊市| 九寨沟县| 宾川县| 江西省| 永清县| 林州市| 射洪县| 六安市| 佛坪县| 廊坊市| 黄山市| 淳化县| 玉田县| 阿拉善盟| 南昌市| 安丘市| 福鼎市| 白水县| 日土县| 息烽县| 临高县| 富源县| 若尔盖县| 当雄县| 承德市| 赤城县| 苏尼特右旗| 高雄县| 昭苏县| 塔城市|