[問題] 繼承,呼叫父類別方法的問題

看板java作者 (海海海)時間9年前 (2015/09/24 17:31), 9年前編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
我下面這樣打就是會出錯 public class Test { public static void main(String[] args) { Book book=new Book(5); book.DeathNote(); eroBook erobook=new eroBook(50); erobook.ERO(); } } class Book { private int pages; public Book(int pages) { setPages(pages); } public void DeathNote() { System.out.print("DeathNote is on page ");printPage(); } public void printPage() { System.out.println(this.pages); } public void setPages(int pages) { this.pages=pages; } } class eroBook extends Book { public eroBook(int pages) { //就是這邊出問題!! setPages(pages); } public void ERO() { System.out.print("ero page is on page ");printPage(); } } 結果: Test.java:34: error: constructor Book in class Book cannot be applied to given types; { ^ required: int found: no arguments reason: actual and formal argument lists differ in length 實在搞不懂錯在哪邊,看書上也是這樣呼叫父類別方法的,不過我把eroBook 的建構子裡面 改用Super 去呼叫父類別就沒問題,或者直接刪除Book的建構子,不給Book初始值也可以順 利通過編譯,請問這究竟錯在哪邊呢? 拜託各位了,有這個疙瘩在這邊我根本沒辦法繼續往下讀﹍ ※ 編輯: s9209122222 (122.117.207.31), 09/24/2015 17:52:34

09/24 17:55, , 1F
結果我多創個Book空的建構子就OK了,為什麼啊!!!
09/24 17:55, 1F

09/24 18:15, , 2F
子類別constructor會去呼叫super()
09/24 18:15, 2F

09/24 19:50, , 3F
所以子類別有用建構子,父類別就一定要有個沒輸入參
09/24 19:50, 3F

09/24 19:51, , 4F
數的父類別囉?
09/24 19:51, 4F

09/24 19:51, , 5F
更正,沒輸入參數的建構子囉?
09/24 19:51, 5F

09/24 19:54, , 6F
一定要用父類別建構子 但沒限制要無參數
09/24 19:54, 6F

09/24 19:55, , 7F
你用super(pages)就可以了 你的例子也是這樣用比較好
09/24 19:55, 7F

09/24 19:59, , 8F
完全不寫的話會默認使用無參數的
09/24 19:59, 8F

09/24 20:00, , 9F
但你的例子中Book不提供無參數的 所以默認找不到就掛了
09/24 20:00, 9F

09/24 20:20, , 10F
了解,感謝
09/24 20:20, 10F

09/25 09:57, , 11F
平常沒有寫其他建構子的話,compiler會自己產生無參數的
09/25 09:57, 11F

09/25 09:58, , 12F
但是有別的建構子就不會,就要自己加
09/25 09:58, 12F
文章代碼(AID): #1M0yBsel (java)
文章代碼(AID): #1M0yBsel (java)