Vector не отображает всю информацию об объекте в командной строке - PullRequest
0 голосов
/ 07 октября 2011

Вывод, который я хотел бы получить:

Длина: XX Ширина: XX Название: XX Цена: XX

Вывод, который я фактически получил:

Заголовок: XX Цена: XX

Почему программа не указала toString класса A?

Main:

case 'c':
                if(!theList.isEmpty()){
                for (int i = 0; i < theList.size(); i++)
                    System.out.println(theList.elementAt(i).toString());
                } else {
                    System.out.println("The list is empty!");
                }
                break;

toString () ClassA:

   @Override
public String toString(){
    StringBuilder result = new StringBuilder();
    result.append("Length: ").append(this.getLength()).append('\n');
    result.append("Width: ").append(this.getWidth()).append('\n');
    return result.toString();
}

ClassB, расширяющий ClassA, toString ():

   @Override
public String toString(){
    super.toString();
    StringBuilder result = new StringBuilder();
    result.append("Title: ").append(this.getTitle()).append('\n');
    result.append("Price: ").append(this.getPrice()).append('\n');
    return result.toString();
}

1 Ответ

0 голосов
/ 07 октября 2011

Это очень просто. Вы только вызвали метод toString, но не использовали возвращаемое значение.

Кроме этого, я бы написал toString метод следующим образом:

@Override
public String toString() {
  return //
    "Length: " + getLength() + '\n' + //
    "Width: " + getWidth() + '\n';
}

Код короче, легче для чтения и компилируется в эквивалентный байт-код в качестве вашего текущего кода. То же самое для B's toString:

@Override
public String toString() {
  return super.toString() + //
    "Title: " + getTitle() + '\n' + //
    "Price: " + getPrice() + '\n';
}
...