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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中方法的继承以及父类未被子类覆盖的方法调用的问题

發布時間:2023/12/9 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中方法的继承以及父类未被子类覆盖的方法调用的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在看java繼承這一塊的時候發現了一個問題,即父類未被子類覆蓋的方法是如何調用的?

是子類擁有了父類的該方法只是沒有顯示表示,還是子類調用了父類的該方法。

為此做了一下驗證

代碼如下:

public class One {protected void printA() {System.out.println("父類printA");}private void printB() {System.out.println("父類printB");}private void printC() {System.out.println("父類printC");}protected void printABC() {printA();printB();printC();} }public class Two extends One {protected void printA() {System.out.println("子類printA");}private void printB() {System.out.println("子類printB");}public void printC() {System.out.println("父類printC");}public static void main(String[] args) {Two t = new Two(); //   One t = new Two(); t.printABC();} }

?

對于第一種情況:子類擁有了父類的該方法只是沒 有顯示表示

由于printABCD方法中調用了printA()、printB()、printC()、printD(),并且printB()在父類中是私有的,所以不可以被子類繼承。如果是這種情況的話,應該會編譯時報錯。然而沒有報錯,顯然不是第一種情況。

對于第二種情況:子類調用了父類的該方法

根據運行結果

這里就會有個疑問-如果是調用了父類方法為什么會printA會使用子類的方法呢?

事實上運行過程應該是這樣的,子類在調用printABCD方法時因為自己沒有重寫這個方法,所以是調用父類的該方法。

即默認為

@Overrideprotected void printABCD() {// TODO Auto-generated method stubsuper.printABCD();}

調用父類printABCD后接著要執行printA()、printB()、printC()、printD()四個方法。其中子類只對printA()進行了覆蓋,printB()沒有進行覆蓋,printC()、printD()不存在覆蓋。因此在調父類的printABCD方法,在執行時如果判斷內部執行的方法沒有對父類的方法進行覆蓋則使用父類的方法,否則使用覆蓋后的方法。

轉載于:https://www.cnblogs.com/liuleicode/p/4953892.html

總結

以上是生活随笔為你收集整理的Java中方法的继承以及父类未被子类覆盖的方法调用的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。