[英]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()不需要任何参数。 参见http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString%28%29
您只能在子类中定义toString(i),而不能在父类中定义。 当您使用代码使用以下代码创建新的子对象时
bArr[bCount] = new AllBooks(bCount, ttl, athr, gnr, "IN", lctn, cndtn);
编译器无法识别创建哪个对象,因此只能链接父类中定义的方法。 它只会知道您首先定义的类型,类型是Book
Book[] bArr
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.