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

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

一道關(guān)于類的繼承的面試題

一道關(guān)于類的繼承的面試題

一只斗牛犬 2018-12-05 13:04:32
class A {        public A() {            Print();        }        public virtual void Print() { }    }    class B : A {        int x = 1;        int y;        public B() {            y = 2;        }        public override void Print() {            Console.WriteLine("x=" + x + " y=" + y);        }    } 這道面試題如上,問題是當實例化B的時候會輸出什么?  我對繼承懂的還不是很清楚,忘高手幫忙排憂解惑下:  我知道在B實例化的時候首先調(diào)用基類A的構(gòu)造方法,而A的構(gòu)造方法被B類重寫過了,但是在重寫的方法里面調(diào)用了2個B類的字段x和y,x=1是肯定沒問題的,因為x已經(jīng)被初始化了,但是y沒有被初始化,所有y應(yīng)該是null吧,因為在A類調(diào)用構(gòu)造方法Print()函數(shù)的時候B類的構(gòu)造函數(shù)還沒有執(zhí)行,我面試的時候就想這個應(yīng)該會拋出異常吧,但是我后來測試下發(fā)現(xiàn)結(jié)果是x=1,y=0  不知道這個y=0是怎么回事呢?難道是編譯器默認的給重寫過的方法里面不認識的字段自動初始化嗎?  還有希望大俠們告訴小弟關(guān)于繼承應(yīng)該注意哪些東西,或者推薦些好的文章書籍之類的.  感激不盡!!!
查看完整描述

2 回答

?
慕標琳琳

TA貢獻1830條經(jīng)驗 獲得超9個贊

你實例化B的輸出結(jié)果是 X=1,Y=0,這都是你重寫Print()的結(jié)果

那么這是為什么呢?

1,首先B是繼承A的,實例化B回先執(zhí)行繼承A類的方法, A類里有一個虛方法是空的,它什么事情都沒有干,它還寫了一個構(gòu)造函數(shù)調(diào)用這個虛方法。

2,在B類里面用override 重寫了A類里的虛方法,最上面x,y都已經(jīng)初始化, 且都是值類型的,他們的默認值都是0,

3,所以實例化B調(diào)用的事重寫后的方法Print() ,當實例化B之后,雖然最終的Y的結(jié)果是2 ,但是Print()不回調(diào)用

 

如果是問y的結(jié)果是多少,你回答2就對了  但在這里它的結(jié)果是等于0


查看完整回答
反對 回復(fù) 2018-12-09
  • 2 回答
  • 0 關(guān)注
  • 452 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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