繁体   English   中英

不从继承的类中调用方法

[英]Not calling method from inherited class

在这种情况下,我有3个班级。 方法类,书籍类,AllBook类。 AllBooks扩展了图书类。 方法类是我大多数方法所在的地方。 我只有一个问题,即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写入文件时,它不是“ linking(?)”,也不是所有book类中的toString方法(在i中)。 有什么问题?

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

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

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

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

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

Book[] bArr 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM