Ну, это вопрос вкуса.Object
почти не имеет гарантированных свойств.Так что нарушать особо нечего.
Если вы говорите, что возвращение имени класса - это такое свойство, которое может быть нарушено, то, конечно, подкласс не должен это менять.Но чтение документации Object.toString () показывает, что такой гарантии нет:
Возвращает строковое представление объекта.В общем случае метод toString возвращает строку, которая «представляет» этот объект в текстовом виде.
Итак Я не вижу здесь нарушения LSP .
LSP не говоритчто подкласс должен вести себя точно так же , что и суперкласс.Это сделало бы подклассы совершенно бесполезными.Требуется только, чтобы подклассы соответствовали спецификации суперкласса.
Единственное, что можно упомянуть, это то, что Object
применяет бессмысленный метод toString
для каждого объекта .Более сложный дизайн, возможно, поместил бы это в интерфейс.
Я думаю, что этот выбор дизайна - просто компромисс, принятый и другими языками, такими как .NET.