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

作者: s9209122222 (海海海)   2015-09-24 17:31:31
我下面這樣打就是會出錯
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
作者: s9209122222 (海海海)   2015-09-24 17:55:00
結果我多創個Book空的建構子就OK了,為什麼啊!!!
作者: jay80915 (一種感覺)   2015-09-24 18:15:00
子類別constructor會去呼叫super()
作者: s9209122222 (海海海)   2015-09-24 19:50:00
所以子類別有用建構子,父類別就一定要有個沒輸入參數的父類別囉?更正,沒輸入參數的建構子囉?
作者: cha122977 (CHA)   2015-09-24 19:54:00
一定要用父類別建構子 但沒限制要無參數你用super(pages)就可以了 你的例子也是這樣用比較好完全不寫的話會默認使用無參數的但你的例子中Book不提供無參數的 所以默認找不到就掛了
作者: s9209122222 (海海海)   2015-09-24 20:20:00
了解,感謝
作者: ssccg (23)   2015-09-25 09:57:00
平常沒有寫其他建構子的話,compiler會自己產生無參數的但是有別的建構子就不會,就要自己加

Links booklink

Contact Us: admin [ a t ] ucptt.com