2015-02-12 4 views
0
package book1; 
import java.util.ArrayList; 


public abstract class Book { 
    public String Book (String name, String ref_num, int owned_copies, int  loaned_copies){ 
    return; 

    } 
} 

class Fiction extends Book{ 
    public Fiction(String name, String ref_num, int owned_copies, String author) { 

      } 

     } 

в тот момент, когда входные значения в переменные аргументы и вызывать их с этим:как я могу вернуть строку?

public static class BookTest { 
    public static void main(String[] args) { 
     ArrayList<Book> library = new ArrayList<Book>(); 
     library.add(new Fiction("The Saga of An Aga","F001",3,"A.Stove")); 
     library.add(new Fiction("Dangerous Cliffs","F002",4,"Eileen Dover")); 


     for (Book b: library) System.out.println(b); 
     System.out.println(); 


    } 
} 

я получить возвращаемое значение этого:

[email protected] 
[email protected] 
[email protected] 
[email protected] 

как я могу преобразовать классы для возврата строкового значения вместо значения объекта? Мне нужно сделать это без изменения класса BookTest. Я знаю, что мне нужно использовать строку для преобразования значений. но я не знаю, как поймать возвращаемое значение с ним. мог ли кто-нибудь указать мне в правильном направлении, как преобразовать этот вывод в строковое значение?

ответ

0

Необходимо предоставить свой объект Забронировать переопределение ToString().

http://www.javapractices.com/topic/TopicAction.do?Id=55

Пример:

@Override public String toString() 
{ 
    return name; 
} 

Где имя, это строка в классе.

+0

Я пробовал это, но он не работает. – chaza194

+1

Покажите, как вы пробовали. Вероятно, вы не соответствовали подписи. Используйте аннотацию @Override, чтобы предотвратить эту проблему. – Kon

+0

Ничего себе голосуйте за правильный ответ ... ладно. Как сказал Кон, сообщите, что не работает, и мы можем вам помочь. – HouseCat

2

Вам необходимо переопределить метод toString() в вашем классе Book или Fiction. Метод фактически объявлен в классе Object, от которого наследуются все классы.

@Override 
public String toString(){ 
    return ""; // Replace this String with the variables or String literals that you want to return and print. 
} 

Этот метод вызывается System.out.println() и System.out.print(), когда они получают объект в параметре (в отличие от примитивного, таких, как int и float).

Чтобы ссылаться на переменные в методе, вам необходимо объявить их в классе и сохранить их через конструктор класса.

Например:

public abstract class Book { 
    private String name; 
    private String reference; 
    private int ownedCopies; 
    private int loanedCopies; 

    public Book (String name, String reference, int ownedCopies, int loanedCopies) { 
     this.name = name; 
     this.reference = reference; 
     this.ownedCopies = ownedCopies; 
     this.loanedCopies = loanedCopies; 
    } 

    @Override 
    public String toString(){ 
     return name + ", Ref:" + reference + ", OwnedCopies: " + ownedCopies + ", LoanedCopies: " + loanedCopies; // Replace this String with the variables or String literals that you want to return and print. 
    } 
} 
+0

Как я могу ссылаться на переменные, поскольку они являются аргументом, и не все из них наследуются. таких как автор. – chaza194

+2

Вам нужно сохранить их в переменной-члене в конструкторе. – gta0004

2

Вы должны переписать ToString() метод вашего класса Book. В этом классе вы можете генерировать String, как вам нравится. Пример:

0

Я надеюсь, что вы назначили переданные аргументы определенным атрибутам классов. Теперь, как только вы закончите с этим, вы можете переопределить метод toString() в Book, чтобы вернуть свою настраиваемую строку для печати.

1

Классы, которые вы определили, не сохраняйте никаких значений. Другими словами, полезно построить новую книгу. Вы должны указать поля:

public abstract class Book { 

    private String name; 
    private String ref_num; 
    private int owned_copies; 
    private int loaned_copies; 

    public String Book (String name, String ref_num, int owned_copies, int loaned_copies) { 
     this.name = name; 
     this.ref_num = ref_num; 
     this.owned_copies = owned_copies; 
     this.loaned_copies = loaned_copies; 
    } 

    public String getName() { 
     return name; 
    } 

    //other getters 

} 

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

for (Book b: library) System.out.println(b.getName()); 

В Java, вы можете также предоставить путь по умолчанию для печати объекта по перекрывая метод toString:

@Override 
public String toString() { 
    return ref_num+" "+name; 
} 

в категории Book.

Смежные вопросы