在这个例子中,我有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)方法。有什么问题?
答案 0 :(得分:1)
您的newBook方法是否在Book类中?继承的作用使得事物只能继承 以上的事物,所以如果你想让一个方法沿着继承树传播,你必须在更高级别定义它。而不是你要在其中使用它的类。
阿卡。在Book中定义toString方法,而不是在AllBooks中定义。
答案 1 :(得分:0)
toString()不期望任何参数。见http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString%28%29
答案 2 :(得分:0)
您只在子类中定义toString(i),而不是父类。 当您使用代码使用下面的代码
创建新的子对象时bArr[bCount] = new AllBooks(bCount, ttl, athr, gnr, "IN", lctn, cndtn);
编译器无法识别创建了哪个对象,因此只能链接父类中定义的方法。它只会知道你定义的类型,类型是Book
Book[] bArr