日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

java 继承调用_【JAVA学习】继承中函数调用机制

發(fā)布時(shí)間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 继承调用_【JAVA学习】继承中函数调用机制 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類(類的對(duì)象)在調(diào)用函數(shù)時(shí),究竟哪一個(gè)函數(shù)被調(diào)用,是存在特定的機(jī)制的,現(xiàn)在我們來梳理下其步驟。

步驟一:當(dāng)其調(diào)用一個(gè)函數(shù)的時(shí)候,編譯器根據(jù)其聲明的變量類型和調(diào)用的函數(shù)名字找到所有此“類”和其父類中具有同名的函數(shù)

Class A{public void getName(inta){

System.out.println("This is Class A and integer is " +a);

}

}

Class BextendsA{public void getName(inta){

System.out.println("This is Class B and integer is " +a);

}public void getName(doublea){

System.out.println("This is Class B and float number is " +a);

}public static voidmain(String[] args){

B b= newB();

b.getName(3.14);

A a = newB();

a.getName(3.14);

} }

首先,根據(jù)步驟一,變量b聲明的類型為B,其中與b調(diào)用函數(shù)同名的函數(shù)有兩個(gè),分別為getName(int a)和 getName(double a),同時(shí)A作為B的父類,有一個(gè)訪問修飾符為public,既子類可以訪問且與變量b同名的函數(shù)getName(int a)。此時(shí),經(jīng)過步驟一篩選之后,變量b所調(diào)用函數(shù)的候選者有如下幾個(gè):

A:

getName(inta)

B:

getName(inta)

getName(double a)

步驟二:編譯器根據(jù)傳入?yún)?shù)類型選擇最合適的函數(shù)。所以b最合適的函數(shù)為public void getName(double a)

步驟三:值得留意的是,如果此函數(shù)前有private , static ,final修飾或者方法是構(gòu)造函數(shù),根據(jù)靜態(tài)綁定(static binding)原則,根據(jù)其顯示聲明的變量類型可以直接確定所調(diào)用的函數(shù)。與之相對(duì)的是動(dòng)態(tài)綁定(dynamic binding),意思即是當(dāng)程序運(yùn)行時(shí),程序會(huì)

找到變量指向的實(shí)際對(duì)象,獲取其實(shí)際類型。再確定其調(diào)用的函數(shù)。

一個(gè)程序中,一般都會(huì)存在大量的函數(shù)調(diào)用,如果每一次調(diào)用都從零開始搜索,無疑會(huì)消耗大量的時(shí)間。因此,JVM會(huì)預(yù)先計(jì)算出每一個(gè)類的函數(shù)調(diào)用表(method table),如下所示

A:

getName(int ) -> A.getName(int)

B:

getName(int ) -> B.getName(int)

getName(double ) -> B.getName(int)

此表包含了每一個(gè)類可以調(diào)用的函數(shù)(無論其是自己的函數(shù)還是父類的函數(shù),只要調(diào)用都需要納入此表)。當(dāng)JVM確定了函數(shù)實(shí)際類型時(shí),按此表用以上步驟進(jìn)行查找調(diào)用。

總結(jié)

以上是生活随笔為你收集整理的java 继承调用_【JAVA学习】继承中函数调用机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。