Каждый класс прямо или косвенно наследуется от класса Object
.
Класс Object
, среди прочих, имеет важный метод, чаще всего переопределяемый: toString
.
Вопрос: не приведет ли переопределение этого метода к нарушению принципа подстановки Лискова по отношению к классу Object
?
Я сделаю пример.
public class Main
{
public static void main(String[] args)
{
Object o = new Object();
String s = o.toString();
if (s.indexOf('@') > -1) {
System.out.println("OK");
} else {
System.out.println(":-(");
}
}
}
public class MyClass
{
private int x;
public string toString()
{
return Integer.toString(x);
}
}
Очевидно, что если я заменю new Object()
на new MyClass()
, поведение системы изменится.
new Object()
наnew MyClass()
приводит к изменению поведения системы. - person zer0uno   schedule 18.11.2018Object
возвращаемая строкаtoString()
(короче) является type@hashcode. Это не говорит о том, что так должно быть для вашего классаMyClass
или что это требование для методаtoString()
. - person Progman   schedule 18.11.2018