0

在这种情况下,我有 3 个课程。方法类、Book类、AllBook类类。AllBooks 扩展了图书类。方法类是我的大多数方法所在的地方(duh)。我只有一个问题,即 addBook 方法。

代码:

方法类

public class methods {
// Variables
int bCount = 0;
int mCount = 0;
int lCount = 0;
int boCount = 0;
//Arrays
Book[] bArr = new Book[500];
Member[] mArr = new Member[250];
Librarian[] lArr = new Librarian[50];
MainMenu mm;
public void newBook() {
    int cont2 = JOptionPane.YES_OPTION;
    int cont = JOptionPane.YES_OPTION;
    int choice = JOptionPane.YES_OPTION;
    while (choice == JOptionPane.YES_OPTION) {
        String ttl = mm.tiltleTF.getText();
        String athr = mm.authorTF.getText();
        String gnr = mm.genreTF.getText();
        String lctn = mm.locationTF.getText();
        String cndtn = mm.conditionTF.getText();
        if (athr == null && gnr == null && lctn == null && cndtn == null) {
            cont = JOptionPane.showConfirmDialog(null, "You have left out some fields are you sure you wish to continue?", "Information left out", JOptionPane.YES_NO_OPTION);
        }
        while (cont == JOptionPane.YES_OPTION) {
            ttl = ttl.toUpperCase();
            athr = athr.toUpperCase();
            gnr = gnr.toUpperCase();
            lctn = lctn.toUpperCase();
            cndtn = cndtn.toUpperCase();
            cont2 = JOptionPane.showConfirmDialog(null, "The book you wish to enter is:" + "\n Title:\t" + ttl + "\n Author:\t" + athr + "\n Genre:/t" + gnr + "\n Location: \n" + lctn + "\n Condition:\t" + cndtn, "Are you sure?", JOptionPane.YES_NO_OPTION);
            while (cont2 == JOptionPane.YES_OPTION) {
                bArr[bCount] = new AllBooks(bCount, ttl, athr, gnr, "IN", lctn, cndtn);
                try {
                    PrintWriter pw = new PrintWriter(new FileWriter("books.txt", true));
                    pw.println(bArr[bCount].toString(0);
                    pw.close();
                    bCount++;
                    displayBooks();
                    choice = JOptionPane.showConfirmDialog(null, "Book added! Do you wish to enter another book?", "Enter another book?", JOptionPane.YES_NO_OPTION);
                } catch (IOException ex) {
                }
            }
        }
    }
}

所有书籍

public class AllBooks extends Book {

private String genre;
private String status;
private String Location;
private String condition;

public AllBooks(int bookID, String title, String author, String genre, String status, String Location, String condition) {
    super(bookID, title, author);
    this.genre = genre;
    this.status = status;
    this.Location = Location;
    this.condition = condition;
}

public String getGenre() {
    return genre;
}

public void setGenre(String genre) {
    this.genre = genre;
}

public String getStatus() {
    return status;
}

public void setStatus(String status) {
    this.status = status;
}

public String getLocation() {
    return Location;
}

public void setLocation(String Location) {
    this.Location = Location;
}

public String getCondition() {
    return condition;
}

public void setCondition(String condition) {
    this.condition = condition;
}

@Override
public String toString() {
    String stg = "";
    stg = stg + getBookID() + '\t' + getTitle() + addSpaces(getTitle(), 30) + getAuthor() + addSpaces(getAuthor(), 30) + genre + addSpaces(genre, 15) + status + addSpaces(status, 5) + Location + addSpaces(Location, 20) + condition;
    return stg;
}

public String toString(int i) {
    String stg = "";
    stg += getBookID() + "#" + getTitle() + "#" + getAuthor() + "#" + getGenre() + "#" + getStatus() + "#" + getLocation() + "#" + getCondition() + "#";
    return stg;
}

}

图书公开课图书{

private int bookID;
private String title;
private String author;


public Book() {
}

public Book(int bookID, String title, String author) {
    this.bookID = bookID;
    this.title = title;
    this.author = author;
}

public int getBookID() {
    return bookID;
}

public void setBookID(int bookID) {
    this.bookID = bookID;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getAuthor() {
    return author;
}

public void setAuthor(String author) {
    this.author = author;
}


public String addSpaces(String s, int w) {
    String spc = "";
    for (int i = 1; i <= (w - s.length()); i++) {
        spc = spc + " ";
    }
    return spc;
}

}

我遇到的问题是,在 newBook 方法中,当它使用 toString 写入文件时,它不是“链接(?)”或识别所有书籍类中的 toString(in i)方法。有什么问题?

4

3 回答 3

1

你的 newBook 方法在 Book 类中吗?继承的工作原理是事物只能从它们之上的事物继承,因此,如果您希望将方法沿继承树传播,则必须在比要使用它的类更高的级别上定义它。

阿卡。在 Book 中定义您的 toString 方法,而不是在 AllBooks 中。

于 2013-07-18T15:57:37.797 回答
0

toString() 不需要任何参数。请参阅http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString%28%29

于 2013-07-18T16:05:57.483 回答
0

您只在子类中定义 toString(i),而不是父类。当您使用以下代码创建新的子对象时

bArr[bCount] = new AllBooks(bCount, ttl, athr, gnr, "IN", lctn, cndtn);

编译器无法识别创建了哪个对象,因此只能链接父类中定义的方法。它只会知道您首先定义的类型,类型是 Book

Book[] bArr 
于 2013-07-18T16:23:06.287 回答