有關java中子類覆蓋父類的方法的傳回值的問題

來源:互聯網
上載者:User
有關java中子類覆蓋父類的方法的傳回值的問題 10 如果在父類Person:
public class Person {
private String name;

public String showName() {
return name;
}
}
而覆蓋了showName方法的子類為:
public class Teacher extends Person{

public String showName() {
return name+"老師";
}
}
為什麼這樣的覆蓋方法是不正確的。
而子類的覆蓋方法的傳回值必須寫成
return super.showName() + "老師";
才算正確。 收合 幽靜夜雨  |  瀏覽 2125 次 問題暫時關閉 推薦於2016-08-14 04:51:34 最佳答案
覆蓋父類的方法,那就是重寫,子類會調用重寫的方法。

override可以翻譯為覆蓋,從字面就可以知道,它是覆蓋了一個方法並且對其重寫,以求達到不同的作用。對我們來說最熟悉的覆蓋就是對介面方法的實現,在介面中一般只是對方法進行了聲明,而我們在實現時,就需要實現介面聲明的所有方法。除了這個典型的用法以外,我們在繼承中也可能會在子類覆蓋父類中的方法。在覆蓋要注意以下的幾點:
1、覆蓋的方法的標誌必須要和被覆蓋的方法的標誌完全符合,才能達到覆蓋的效果;
2、覆蓋的方法的傳回值必須和被覆蓋的方法的返回一致;
3、覆蓋的方法所拋出的異常必須和被覆蓋方法的所拋出的異常一致,或者是其子類;
4、被覆蓋的方法不能為private,否則在其子類中只是新定義了一個方法,並沒有對其進行覆蓋。
 本回答由 電腦網路分類達人 董輝推薦 評論(1)  0  9 發布評論 275408194 | 2016-11-19 15:50 傳回值:子類可以是父類的相容值 回複

有車2015 

採納率:85% 來自團隊:思想驅動 擅長: 電腦/網路 其他回答 很簡單,在這個method裡面的時候,你寫name,系統不會自動匹配super.name而是自動匹配this.name,由於你這個name在this裡面沒有,所以系統就找不到了。你寫成super.name應該也能通過。 追問

謝謝回答,我想多問一句,既然父類中的private屬性子類不能繼承,那麼子類是否擁有問題中的name屬性了。
追答
擁有,但是不能用。你要是這麼申明一個對象:Person p=new Teacher("blablabla");那麼p.name就可以用了。你想直接繼承變數,應該用protected。我複製一張對照表:範圍        當前類   同一package      子類     其他package public          √              √                     √          √ protected       √            √                    √          × friendly        √             √                    ×          × private         √             ×                    ×          × 還有一種叫default。就是你什麼都不加的時候的範圍,那個範圍和publick類似,但是不支援其他package而是支援java.lang.Object這個package
 本回答被提問者採納 timom    |  推薦於2016-03-06 22:16:29 評論(2)  4  4 發布評論 qjzh0603 | 2014-4-30 10:06 寫成super.name通過不了,因為name是private屬性。 回複 熱心網友 | 2013-2-15 11:01 這位老師答得真好:) 回複 父類中的name定義為private,只能被父類自己識別,可以把private改成public。 youlian20    |  發佈於2012-10-06 12:37 評論  0  0 person中的name是private的,子類不能直接去調用。 winters1224    |  發佈於2012-01-21 15:39 評論  0  0 這種題目有木有,我不知道哎。。 玉米肉丸    |  發佈於2012-01-21 15:38

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.