第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

你能分析一下關(guān)于繼承的JAVA代碼的輸出嗎

你能分析一下關(guān)于繼承的JAVA代碼的輸出嗎

素胚勾勒不出你 2023-03-17 15:19:49
我在代碼的注釋中添加了我的問題。class Parent{    int num =9; //I think num in Parent class is overrided by the num in Child class. why is the num in the first line of output is still 9?    { //code block        System.out.println("Parent constructor code..."+num);    }    Parent(){        System.out.println("Parent constructor run");         show(); //why does this method here invoke the show() method in Child class?    }    void show() {        System.out.println("Parent show..."+num);    }}class Child extends Parent{    int num = 8;     {        System.out.println("Child constructor code..."+num);        num = 10;    }    Child(){         System.out.println("Child constructor run");         show();     }    void show() {        System.out.println("Child show..."+num);    }}public class Test {    public static void main(String[] args) {        new Child();    }}輸出是:父構(gòu)造函數(shù)代碼...9父構(gòu)造函數(shù)運(yùn)行子顯示...0子構(gòu)造函數(shù)代碼...8子構(gòu)造函數(shù)運(yùn)行子顯示...10感謝你們!我發(fā)現(xiàn)這是一個可變的陰影和隱藏問題。
查看完整描述

3 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗 獲得超10個贊

對象構(gòu)建的順序是:

  1. 變量聲明和初始化

  2. 實例構(gòu)造函數(shù)塊

  3. constructor

如果一個類有父類,則在實際類之前先為父類完成相同的順序。

父母第一

整數(shù) = 9

首先評估,num設(shè)置為 9(父母的 1)

父構(gòu)造函數(shù)代碼...9

實例初始化塊在構(gòu)造函數(shù)(父類的 2.)之前執(zhí)行

父構(gòu)造函數(shù)運(yùn)行

構(gòu)造函數(shù)被調(diào)用(parent's 3.)

兒童節(jié)目...0

Parent調(diào)用的構(gòu)造函數(shù)show()。show()被覆蓋,因此Child調(diào)用了。

孩子的 1. 和 2. 還沒有被調(diào)用,因此 overriding numinChild仍然是 0。*1

然后孩子

整數(shù) = 8

Child1. 被評估

子構(gòu)造函數(shù)代碼...8

Child的 2.num在此之后設(shè)置為 10。

子構(gòu)造函數(shù)運(yùn)行

Child的 3。

兒童節(jié)目...10

Child的構(gòu)造函數(shù)調(diào)用show()。

*1:

這就是為什么final在構(gòu)造函數(shù)中調(diào)用非方法是非常危險的。方法往往依賴于被初始化的成員變量;他們不是在這一點(diǎn)上。

NullPointerException如果這是一個非原始變量,如果您的方法試圖訪問它,您很可能會遇到 a 。


查看完整回答
反對 回復(fù) 2023-03-17
?
小怪獸愛吃肉

TA貢獻(xiàn)1852條經(jīng)驗 獲得超1個贊

當(dāng) java 創(chuàng)建一個子類時,它必須調(diào)用super()初始化父類——這樣它就可以在超類或其他活動中實例化私有字段。(這不會創(chuàng)建父類的對象。)這就是您看到的原因Parent constructor code...9- 它正在調(diào)用父代碼,并打印父類的num.

因為您創(chuàng)建了一個子類,所以在父構(gòu)造函數(shù)中show()調(diào)用了子類。這就是為什么在構(gòu)造函數(shù)中調(diào)用非 final 方法是危險的——如果子對象覆蓋了它們,則將調(diào)用子對象的方法。

孩子的num是 0 因為Java 將成員變量初始化為默認(rèn)值,而您的代碼還沒有機(jī)會將其設(shè)置為 10。

至于你的子代碼,num沒有被覆蓋,它被隱藏了——只有方法可以被覆蓋。這就是為什么您的孩子show()在正確初始化后將其顯示為 10 的原因。如果你想訪問父變量,你可以用 來實現(xiàn)super.num,但這通常被認(rèn)為是不好的做法,因為它會引起混淆。


查看完整回答
反對 回復(fù) 2023-03-17
?
慕萊塢森

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊

我認(rèn)為這是因為你的構(gòu)造函數(shù)自動調(diào)用超類構(gòu)造函數(shù)。(對于我們的第一個問題。)盡管如此,你重寫了 show 所以當(dāng)它遇到這個方法時,它調(diào)用子方法



查看完整回答
反對 回復(fù) 2023-03-17
  • 3 回答
  • 0 關(guān)注
  • 236 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號