2011-12-04 8 views
0

私はJavaプログラミングコースの宿題を完了していますが、サブクラスの概念を理解できません。Javaでのサブクラスの実装

タイトルやページの 数のデータフィールドが含まれているブックという名前のクラスを作成します。ここでは

は疑問です。これらのフィールドの取得および設定メソッドをインクルードします。次に、 Textbookという名前のサブクラスを作成します。このサブクラスには、Textbookのグレードレベルを保持する追加のフィールド と、グレードレベルのフィールドを取得して設定する追加のメソッドが含まれています。 が各クラスのオブジェクトを使用していることを示すアプリケーションを作成します。ファイルをBook.java、 Textbook.java、およびDemoBook.javaとして保存します。ここで

Book.javaための私のコードです:ここでは

public class Book 
{ 
    String bookTitle; 
    int numPages; 

    private void setBTitle(String title) 
    { 
     bookTitle = title; 
    } 

    private void setBPages(int pages) 
    { 
     numPages = pages; 
    } 

    private String getBTitle() 
    { 
     return bookTitle; 
    } 

    private int getBPages() 
    { 
     return numPages; 
    } 

    public void displayBookInfo() 
    { 
     System.out.println("The book's title is: " + bookTitle + "."); 
     System.out.println("The number of pages is: " + numPages + "."); 
    } 
} 

はTexbook.javaのための私のコードです:

public class Textbook extends Book 
{ 
    int gradeLevel; 

    public int getGLevel() 
    { 
     return gradeLevel; 
    } 

    public void setGLevel(int level) 
    { 
     gradeLevel = level; 
    } 
    } 

私が実際に正しいものを2つの部分があります場合は、どのように私はこれをDemoBook.javaファイルに実装しますか?

ご迷惑をおかけして申し訳ございません。ここで

はDemoBook.javaファイルの私のコードです:

import java.util.Scanner; 

public class DemoBook 
{ 
    public static void main(String[] args) 
    { 
     String BTitle; 
     int BPages; 
     int BLevel; 

     Book b = new Book(); 
     Textbook t = new Textbook(); 
     Book bt = new Textbook(); 

     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter the title of your book: "); 
     BTitle = input.nextLine(); 
     System.out.println("Please enter the number of pages: "); 
     BPages = input.nextInt(); 
     System.out.println("Please enter the grade level: "); 
     BLevel = input.nextInt(); 

     b.setBTitle(BTitle); 
     b.setBPages(BPages); 
     t.setGLevel(BLevel); 

     b.displayBookInfo(); 

    } 
} 

私はプライベートに変数を変更し、これは私が手コンパイラエラーです:

DemoBook.java:33: error: setBTitle(String) has private access in Book 
     b.setBTitle(BTitle); 
     ^
DemoBook.java:34: error: setBPages(int) has private access in Book 
     b.setBPages(BPages); 
     ^
2 errors 

私はまだ把握しておりませんこの。この章は、「継承の概要」と題されています。

+0

は、 'DemoBook.java'「とは、各クラスのオブジェクトを使用して実証したアプリケーション」になることです。 – ruakh

+2

私はまた、変数を非公開にすることを提案します。アクセスを提供するゲッタとセッタがあります。 – user219882

答えて

4

コードV1:

私はそれだけで、各タイプの1を作成し、ないいくつかのセットをして取得するmain()関数でDemoBook.javaを作るためにあなたを求めています信じています。コード自体は私にとっては問題ないようです。

コードV2:

あなたのゲッターとセッターを持っている必要があり、すべての公共の滞在! Tomasと他の人が何を意味したかは、変数自身をプライベート、Stringと2つのintにすることでした。通常は、メンバー変数のすべてをプライベートにし、getterとsetterを公開する必要があります。また、getterとsetterをプライベートにすると、派生クラスでアクセスすることさえできません!

私はあなたの本の間にもう少し詳しく調べています。 1つから取得し、別のに設定してみて、3つのすべてを印刷、野生行く! =)

0

この割り当ては、多態性の概念に精通しています。 良い概要がありますhere

1

Danalogが言ったように、クラスはうまくいきました。試してみることができるすべての事例を試してみてください。

いくつかのブックオブジェクトを作成し、Book b = new Book();を作成し、いくつかのTextBooksを作成することをお勧めします。TextBook t = new TextBook();
最後にBook bt = new TextBook();です。

これらをすべて再生して、いくつかの結果を印刷します。

EDIT:あなたはゲッターとセッターを使用しているとして、上記@Tomasグレート提案は、変数をプライベートにします。

0

が取得し、これらのフィールドの設定方法を含めます。

は、これは一般的に、あなたのフィールド(すなわち。メンバ変数は)privateがそれらををカプセル化し、アクセスし、これらの変数を変更する唯一の方法としてgetset方法の使用を必要とするべきであることを意味します。

実際にこれらの2つの部分が正しい場合、私はこれをDemoBook.javaファイルにどのように実装しますか?

これは基本クラスと派生型のオブジェクトを作成する方法を知っているかどうかを確認し、正しく使用するためのテストクラスです。これはアプリケーションのエントリポイントなので、内部にはpublic class DemoBookmainメソッドがあります。

あなたがsetでそれらに値を割り当てた後は、get方法で二つのクラスの機能が正常に動作していることを確認し、そしておそらく「フィールド」をプリントアウトするために、いくつかテストケースをしなければなりませんメソッド。私の読書によって