2013-07-18 4 views
0

В этом случае у меня есть 3 класса. Класс метода, класс книги, класс класса 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; 
} 

}

Книга общественного класса Book {

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, это не «ссылки (?)» Или признания ToString (в I) метод в все книги класс. В чем проблема?

ответ

1

Ваш новый метод книги в классе книги? Наследование работает так, что вещи могут унаследовать только от вещей, которые являются выше, поэтому, если вы хотите, чтобы метод распространялся по дереву наследования, вы должны определить его на уровне выше, чем класс, который вы хотите использовать в .

Aka. Определите свой метод toString в книге, а не в AllBooks.

0

Вы определяете toString (i) в своем дочернем классе, а не в родительском. При использовании кода для создания нового дочернего объекта, используя приведенный ниже код

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

компилятор не может определить, какой объект создается, поэтому только методы, определенные в родительском классе могут быть связаны между собой. Это будет только указать тип, который вы определили в первую очередь, введите:

Book[] bArr 
Смежные вопросы