2015-12-10 169 views
1

我需要用另一个类的对象创建一个数组,但另一个类也使用构造函数中另一个类的对象...我会尽量解释更好:如何在参数中调用构造函数的构造函数?

public class BookStore 
{ 
    private String storeName; //e.g. "Jason's New Books" 
    private Book[] inventory; // Array of Book objects 

    public BookStore() 
    { 
     inventory = new Book[100]; 

     inventory[3] = new Book("James Joyce", 2013, "ULYSSES"); 
    } 

我需要创建此书数组,但我无法弄清楚如何把这些参数,因为在书类的构造函数是这样的:

正如你所看到的,此构造函数使用对象从另一个类来启动,而其他类的构造函数是这样的:

public Date() 

public Author() 

当我尝试编译书店类我得到以下错误:

"incompatible types: java.lang.String cannot be converted to Author"

+0

'不兼容的类型:java.lang.String不能转换为Author'很自我解释。您需要先创建一个作者对象,然后传递它而不是一个字符串。简单版本 - 'Author a = new Author();新书(一);' – csmckelvey

回答

4

使用此:

import java.util.Date; 

inventory[index] = new Book(
    new Author("Author name"), 
    new Date(115, 11, 10), // The 10th of December, 2015 
    "book title" 
); 

考虑到Author类定义了这样的构造

public class Author { 
    private String name; 
    // Other member variables 

    public Author(String name) { 
     this.name = name; 
    } 

    // Other methods 
} 
+0

@托马斯感谢'日期'注。 –

1

如果你只有在DateAuthor类参数构造函数,你必须使用多个语句的情况下创建:

Author author = new Author(); 
author.setName("James Joyce"); // assuming such a method exists 
Date date = new Date(); 
date.setYear(2013); // assuming such a method exists 
inventory[3] = new Book(author, date, "ULYSSES"); 
0

就快,你只需要创建的每个对象的实例:

private Book[] inventory; // Array of Book objects 

    public BookStore() 
    { 
     inventory = new Book[100]; 
     inventory[3] = new Book(new Author(), new Date(), "title"); 

你可以交替做这样的事情:

 Author author = new Author(); 
     Date date = new Date(); 

     inventory[3] = new Book(author, title, "title"); 

您需要在需要p来传递每个对象arameters来匹配你的构造

0

由于您类建筑工Book(Author author, Date published, String title)接受3个参数如下

  1. 第一个参数是作者
  2. 第二个参数的目的是日期的对象
  3. 第三个参数是字符串变量

并且使用的是字符串,所以其throughing的错误

因此,而是采用

inventory[3] = new Book("James Joyce", 2013, "ULYSSES"); 

使用

Author objAuthor = new Author(); 
Date objDate = new Date(); 
inventory[3] = new Book(objAuthor, objDate, "ULYSSES"); 
0

从@Sparta答案有一个问题:一个月在java.util中的数字。日期为零(1月为0,2月为1等)并且周转,并且年份为1900年,所以new Date(2015, 12, 10)不是“2015年12月10日”,而是“3916年1月10日”

对不起,本来想评论你的答案,但我还没有足够的声誉......