2016-09-14 9 views
0

私は継承の問題に取り組んでいます。私は本のスーパークラスを持っています。それから私は本を拡張するクラスの電話を持っています。次に、出力を生成するために配列を使用するドライブPolyMainがあります。継承とコンストラクタコードで支援が必要

* Phoneクラスのコンストラクタは、ブック内の総ページ数を取得するためにwhitePages + yellowPagesを集計し、これをスーパーコールの単一パラメータとしてブックスーパークラスに渡す必要があります。書籍の総ページ数と書籍のタイトルは、Bookクラスのコンストラクタで設定されています。

PolyMainクラスを修正して、少なくとも1つの電話帳を作成し、ライブラリに格納します。 PolyMainクラス内で定義されている印刷方法を変更することなく、ライブラリを印刷できるようになりました。*

アウトプットにはタイトル、ページ数(合計)、イエローページ数およびホワイトページ数。以下のプログラムは私にその出力を与えます。

しかし、PolyMainには整数が追加されています。例:library [2] = new Novel( "Animal Farm"、250,9); 「250と9」が追加され、それがページや章に印刷されます。

PolyMainクラスに数値を追加する必要がある場合、私のコンストラクタがyellowPagesとwhitePagesを合計していることを確認するにはどうすればよいですか? library [3] =新しい電話( "Black Hills Directory"、600、350、250); "600,350,250"またはいくつかの整数を追加しないとエラーが発生し、コンパイルされません。ここで

スーパークラスのコードです:

public class Book 
{ 
    private String title;  
    private int pages;  

    public Book(String title, int pages)  
    {  
    this.title = new String(title);  
    setPages(pages); 
    }  

public void setPages(int pages)  
{  
    this.pages = pages; 
}  
public int getPages()  
{  
    return pages;  
}  
public void print()  
{  
    System.out.print(title + " has " + pages + " pages"); 
    } 
} 

ここでは私の子クラスです。

public class Phone extends Book 
{ 
    private int yellowPages = 250; 
    private int whitePages = 350; 


public Phone (String title, int pages, int whitePages, int yellowPages)  
{ 
    super(title, pages); 

    this.whitePages = whitePages; 
    this.yellowPages = yellowPages; 
    pages = whitePages + yellowPages; 
    }  
public void print()  
{  
    super.print();  
    System.out.println(", " + yellowPages + " yellowPages, " + "and " + 
        whitePages + " whitePages."); 
} 

}

は、ここに私のドライバクラスです。

public class PolyMain 
{ 
public static void main(String [] args)  
{  
    Book [] library = new Book [5];  
    library[0] = new Novel("Jaws", 300, 15);  
    library[1] = new Almanac("New World ", 100, 50);  
    library[2] = new Novel("Animal Farm ", 250, 9); 
    library[3] = new Phone("Black Hills Directory ", 600, 350, 250); 
    listBooks(library);  
}  
    static void listBooks(Book [] library)  
{  
    for (int i = 0; i < library.length && library[i] != null; i++)  
    library[i].print();  
}  
} 
+0

としてタイトルとホワイトページ+のYellowpagesのようタイトルを使用して、スーパークラスのコンストラクタを呼び出すタイトル、ホワイトページ、およびイエローページ

コンストラクタで 'super(title、whitePages + yellowPages)'を呼び出すことができるので、 '600' /' pages'パラメータは必要ありません。 –

+0

@Ken Y-N。ポインタありがとうございますが、私はそれを得ていません。私がオブジェクトから "600/350/250 /"を引っ張ると、私のPhoneメソッドが "string、int、int、int"で設定されているというエラーが出ます。私はキャッチ22にあるようだ。もし私が電話を変更すると、それはPolyMainを台無しにし、Phoneを修正することなくPolyMainを修正することはできない。どのように編集してもエラーが出ます。説明できますか?お願いしてありがとう! – HerdingDogRescuer

答えて

1

あなたのスペックは、電話でのクラスのコンストラクタは、本の総ページ数を取得し、スーパーでは、単一のパラメータとしてブック・スーパークラスにこれを渡すためにホワイトページ+のYellowpagesのをまとめるべきだ」それをすべて言いますコール。"

あなただけの3つのパラメータを使用して携帯電話のコンストラクタを設定することができます - 今、あなたは思えページ

+0

+ mikbzonありがとうございます。私はまだ新しい電話オブジェクトを作成するドライバクラスについては不明です。 – HerdingDogRescuer

+0

ありがとうございます。私はまだ新しい電話オブジェクトを作成するドライバクラスについては不明です。ライブラリ[3] =新しい電話( "ホットスプリングスディレクトリ"、600,350,250);数字(600,350,250)をそこから引き出すと、エラーが出ます。電話機のコンストラクタとPolyMainのオブジェクトを修正して動作させる方法がわかりません。 – HerdingDogRescuer

関連する問題