Vector не будет отображать всю информацию об объекте в командной строке

#java #vector #tostring

#java #вектор #tostring

Вопрос:

Вывод, который я бы придумал:

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

Результат, который я действительно получил:

Название: XX Цена: XX

Почему программа пропустила toString ClassA?

Главная:

 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. Я предлагаю вам использовать a List вместо a Vector

Ответ №1:

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

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

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

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

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