toString в подклассах не может переопределить абстрактный toString, Java - PullRequest
3 голосов
/ 11 октября 2011

У меня есть очень длинное упражнение, и я столкнулся с проблемой в каждом подклассе.Проблема говорит, и я понятия не имею, какую ошибку я совершил, когда писал.Если бы вы могли проверить 4 метода toString, я был бы очень признателен.

Код здесь: http://paste.org/pastebin/view/39488 Я знаю, что код должен быть здесь, но он очень длинный, и я не могу его организоватьхорошо.

toString() in Shape cannot override toString() in java.lang.Object; attempting to use incompatible return type

toString() in Square cannot override toString() in java.lang.Object; attempting to use incompatible return type `

toString() in Sphere cannot override toString() in java.lang.Object; attempting to use incompatible return type

toString() in Cube cannot override toString() in java.lang.Object; attempting to use incompatible return type

спасибо

Ответы [ 5 ]

6 голосов
/ 11 октября 2011

Вам необходимо изменить тип возвращаемого значения функции на String и вернуть текст вместо записи в System.out.

public String toString() {
    return  "(" + super.getX() + ", " +
    super.getY() +") " + "side: " + super.getDimension1();
}

РЕДАКТИРОВАТЬ : если вы хотитечтобы иметь метод, который выводит объект непосредственно в System.out в текстовой форме, вам нужно будет вызвать его как-нибудь иначе, чем toString().Это потому, что toString() - это метод, принадлежащий java.lang.Object, который автоматически расширяется всеми классами Java.

5 голосов
/ 11 октября 2011

toString () должен возвращать String, а не void.

// false
public abstract void toString();

// right
public abstract String toString();    

Примечание. Не следует печатать (System.out) в методе toString ().Вы должны скорее вернуть строковое представление объекта.

1 голос
/ 02 декабря 2012

toString() реализован в классе Object, и каждый класс расширяет его.Этот метод есть в каждом классе, и у нас не может быть двух методов с одинаковой сигнатурой, но с разным типом возврата.Поскольку toString() уже существует с типом возврата String, у нас не может быть еще одного toString() с любым другим типом возврата.

1 голос
/ 11 октября 2011

Должен возвращать строку, а не void.

public abstract String toString()
1 голос
/ 11 октября 2011

потому что вы пытаетесь переопределить его возвращаемым типом void. toString должен вернуть String.

...