亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么必須用Person p=new Child();才會顯示下劃線

而Child c=new Child();不會出現下劃線

正在回答

5 回答

//1?有警告,需忽略
Person?p?=?new?Child();
//2?無警告
Child?p?=?new?Child();

p.sing();

new Child()創建了Child類的實例化對象,變量p引用了這個Child類的對象,所以p是引用變量,而p前面的類名則表明p的類型,即是Person類型或者Child類型。

Person類型下的方法已經過時,而Child類型依然實現了這個方法(注意這里的“過時”的意思,老師講的時候是說sing()方法定義得不太合適,因為有些類根本不需要實現這個方法,就像有些人不會唱歌,但是標準里卻有唱歌這個標準)。所以如果要將引用變量聲明為Person類型并去調用過時的sing()方法是不合適的,所以要有警告;然而就像有些人還是很會唱歌的,若聲明為Child類型的并去調用sing()方法,它不僅會唱,唱得還非常好,是再合適不過了,所以就無需警告。我覺得還是要理解“過時”的含義,過時不是錯,只是不適用于大多數。

######

這也只是我的理解,覺得我理解得也不透徹,因為也注意到了這個問題,所以才這樣關注。以后也會繼續關注的。

2 回復 有任何疑惑可以回復我~

子類Child覆蓋了父類的方法 ? 使用了@Override

但是父類Person 修飾了一個已經過時的方法 ?使用了@Deprecated

此時強行調用父類繼承來的方法就會有個代碼過時的橫線,并且報一個代碼過時的警告,但不會影響正常使用。

如果要去掉警告可以使用 ?@suppressWarings("deprecation") ?來忽略這個警告


0 回復 有任何疑惑可以回復我~

你不NEW個出來就不會調用 ?都不用他當然不管你是不是過時了


0 回復 有任何疑惑可以回復我~

有可能child的構造函數標記為已過時

0 回復 有任何疑惑可以回復我~

類型對應當然不會有下劃線;對應不上才會

0 回復 有任何疑惑可以回復我~
#1

深夜雀電臺 提問者

不是下劃線,是代表代碼過時的橫線
2015-12-22 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

為什么必須用Person p=new Child();才會顯示下劃線

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號