в абстрактном классе:
public String toString() {
return "distance = " + String.format("%.3f", way) +
" moving speed = " + String.format("%.3f", SPEED)
}
в потомке от абстрактного:
public String toString() {
return "RideOnLine: " + super.toString();
}
в потомке от потомка:
public String toString() {
return "RideOnCurve: " + super.toString();
}
в итоге вывод: RideOnCurve: RideOnLine: distance = 60,000 moving speed = 60,000. Подскажите как грамотно сделать, чтобы не было строки(курсивом) от потомка абстрактного?
Сама суть переопределения методов в том, чтобы все дети класса-родителя, переопределившего какой-либо метод, видели у себя "новую" версию метода.
Вы же хотите иметь возможность получить "чистый" результат метода toString() абстрактного класса у всех потомков по иерархии. Для этого вынесите этот метод отдельно (при необходимости - в финальный) и используйте в потомках его. Пример реализации:
abstract class AbstractClass {
private float way = 60000;
private float SPEED = 60000;
@Override
public String toString() {
return formatData();
}
protected final String formatData() {
return String.format("distance = %.3f moving speed = %.3f", way, SPEED);
}
}
class Parent extends AbstractClass {
@Override
public String toString() {
return "RideOnLine: " + formatData();
}
}
class Child extends Parent {
@Override
public String toString() {
return "RideOnCurve: " + formatData();
}
}
class Abstract {
protected String getInfo() {
return "distance = " + String.format("%.3f", way) +
" moving speed = " + String.format("%.3f", SPEED);
}
@Override
public String toString() {
return getInfo();
}
}
class Child1 extends Abstract {
@Override
public String toString() {
return "RideOnLine: " + getInfo();
}
}
class Child2 extends Child1 {
@Override
public String toString() {
return "RideOnCurve: " + super.toString();
}
}
Или
class Abstract {
@Override
public String toString() {
return "distance = " + String.format("%.3f", way) +
" moving speed = " + String.format("%.3f", SPEED);
}
}
class Child1 extends Abstract {
protected String getPrefix() {
return "RideOnLine: ";
}
@Override
public String toString() {
return getPrefix() + super.toString();
}
}
class Child2 extends Child1 {
@Override
protected String getPrefix() {
return "RideOnCurve: ";
}
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники