2016-08-29 11 views
1

私はオブジェクト指向プログラミングの新機能です。私は次のエクササイズをやってる:ブッククラスから著者名を簡単に取得

Author author; 
String title; 
int noOfPages; 
boolean fiction; 

は、これらの属性のそれぞれについて、標準get/setメソッドヘッダを記述します。以下の属性を持つものとして定義されるクラスBook考える

  1. これは私のコードで実際にコード[コード]をし、1

運動にするためにmethodscalled属性とget/setに基づいBookクラスをコンパイルします。ここでは

public class Author { 

    //private variable 
    private String name; 
    private String gender; 
    //constructor 
    public Author (String name, String gender){ 
     this.name = name; 
     this.gender = gender; 
    } 
    //getters 
    public String getName(){ 
     return name; 
    } 
    public String getGender(){ 
     return gender; 
    } 
public class Book { 

    //private variables 
    private Author author; 
    private String title; 
    private int noOfPages; 
    private boolean fiction; 

    //constructor 
    public Book(String title, int noOfPages, boolean fiction){ 
     this.author=new Author ("Jacquie Barker","Female"); 
     this.title = title; 
     this.noOfPages=noOfPages; 
     this.fiction = fiction;  
    } 

    //getters 
    public Author getAuthorsName(){ 
     return this.author; 
    } 
    public String getTitle(){ 
     return title; 
    } 

    public int getNoOfPages(){ 
     return noOfPages; 
    } 

    public boolean getFiction(){ 
     return fiction; 
    } 

    //setters 
    public void setAuthor(Author newAuthor){ 
     author=newAuthor; 
    } 
    public void setTitle (String title){ 
     this.title=title; 
    } 
    public void setNoOfPages(int noOfpages){ 
     this.noOfPages=noOfpages; 
    } 
    public void setfiction(boolean fiction){ 
     this.fiction=false; 
    } 

    public String toString(){ 
     return "Title: " + this.title + "\n"+"Author: " + this.author + "\n" + 
       "No. of pages: " + this.noOfPages + "\n" + "Fiction: " + this.fiction; 
    } 
} 

ですメインの抜粋:

Title: Beginning in Java Objects 

Author: [email protected] 

No. of pages: 300 

Fiction: true 

あなたが見ることができます、プログラムは、著者の名前を印刷しません。

私はすべての助けに感謝します!

+1

印刷することを期待した理由とその理由は何ですか? – shmosel

+1

'toString'メソッドをオーバーライドします。 'Author'を' String'と連結すると暗黙のうちに呼び出されます。 – RamenChef

答えて

0

あなたは著者の名前を返すようにしたい場合は、これを変更します。

public Author getAuthorsName(){ 
    return this.author; 
} 

へ:そう取得するには、現在

public String getAuthorsName(){ 
    return this.author.getName(); 
} 

あなたの方法からクラスAuthorのオブジェクトを返しています呼び出し元のコードでauthor.getName()を呼び出すか、既存のメソッドを変更して上記のように著者の名前を返す必要があります。

+0

あなたの素早く便利な応答をありがとうございました – Nami

1

toStringをAuthorクラスで実装する必要があります。

public class Author { 

     //private variable 
     private String name; 
     private String gender; 
     //constructor 
     public Author (String name, String gender){ 
      this.name = name; 
      this.gender = gender; 
     } 
     ... 
     public String toString() { 
      return "Name " + name + "\t Gender: " + gender + "\n"; //Somethign like this. 
     } 
} 
+0

ありがとうございました – Nami

2

ここには2つのオプションがあります。まず、あなたは単に作者の実際の名前を印刷するには、あなたのBook.toString()方法でコードをリファクタリングできます

public String toString(){ 
    return "Title: " + this.title + "\n"+"Author: " + this.author.getName() + "\n" + 
      "No. of pages: " + this.noOfPages + "\n" + "Fiction: " + 
} 

第二に、あなたは著者の名前を返すためにAuthorクラスでtoString()メソッドをオーバーライドすることができます。あなたがいたとして、その後

public class Author { 
    // print the author's name when an Author object appears in a print statement 
    public String toString() { 
     return this.name; 
    } 
} 

をして::

public class Book { 
    public String toString(){ 
     return "Title: " + this.title + "\n"+"Author: " + this.author + "\n" + 
      "No. of pages: " + this.noOfPages + "\n" + "Fiction: " + this.fiction; 
    } 
} 
+0

私の質問にあなたの非常に有用で詳細な応答をありがとう! – Nami

1

ます場合は、そのままJavaはあなたがAuthorオブジェクトを印刷しようとすると、このtoString()メソッドを呼び出しますので、その後、あなたは、あなたのBook.toString()方法を残すことができますEclipse、IntelliJ、NetBeansのようなIDEを使用している場合、これらの標準getterとsetterを生成させることができます。メニューを探検してください。

このように、タイプミスはありません(setfictionのように、fは大文字にする必要があります)。

初心者であるため、まず自分で作成してから自動生成させる必要があります。そのため、ソリューションを比較することができます。

関連する問題