2013-07-18 103 views
0

在這種情況下,我有3個類。方法類,Book類,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) { 
       } 
      } 
     } 
    } 
} 

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; 
} 

}

我遇到的問題是,當它用的toString寫入文件newBook方法,它不是「鏈接(?)」,或在所有認識了toString(在我)方法書籍課。有什麼問題?

回答

1

您是否是Book類中的newBook方法?繼承的作用是使得事物只能繼承以上的東西,所以如果你想要一個方法沿着繼承樹傳播下去,你必須在高於的級別上定義它,而不是你希望在其中使用它的類。

又名。在Book中定義您的toString方法,而不是在AllBooks中。

0

您只在子類中定義toString(i),而不是父類。 當您使用下面的代碼

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

創建使用新代碼的子對象,編譯器無法識別創建該對象,所以只在父類中定義的方法可以鏈接。它只會識別您定義的類型,類型爲Book

Book[] bArr