不从继承类调用方法

时间:2013-07-18 15:54:24

标签: java arrays inheritance tostring

在这个例子中,我有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) {
                }
            }
        }
    }
}

Allbooks

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写入文件时,它不是“链接(?)”或识别all books类中的toString(in i)方法。有什么问题?

3 个答案:

答案 0 :(得分:1)

您的newBook方法是否在Book类中?继承的作用使得事物只能继承 以上的事物,所以如果你想让一个方法沿着继承树传播,你必须在更高级别定义它。而不是你要在其中使用它的类。

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

答案 1 :(得分:0)

答案 2 :(得分:0)

您只在子类中定义toString(i),而不是父类。 当您使用代码使用下面的代码

创建新的子对象时
bArr[bCount] = new AllBooks(bCount, ttl, athr, gnr, "IN", lctn, cndtn);

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

Book[] bArr