Я новичок в Java, и я изучаю основы. Я изучал метод toString
и как переопределить его в своих классах. Мне просто интересно, почему toString
быть public
? это потому, что он определен так в классе Object
?
Почему мой главный метод toString() должен быть общедоступным?
Ответ 1
Из официальной документации Oracle :
Модификаторы
Спецификатор доступа для переопределяющего метода может предоставить больше, но не менее, доступ, чем переопределенный метод. Например, метод защищенного экземпляра в суперклассе может быть общедоступным, но не закрытым, в подклассе.
Это потому, что наследование создает связь IS-A между двумя классами, для которых принцип Лисковский подстановка Должен быть действителен. Без прежнего ограничения, которое было бы невозможно обеспечить.
Ответ 2
Подумайте об этом: вы подкласс Gizmo с MyGizmo. Это означает, что в любом месте, где можно использовать Gizmo, вы можете использовать MyGizmo в нем. Если какая-то программа выполняет gizmoObject.toString()
, тогда это должно работать, даже если gizmoObject не является Gizmo, а MyGizmo.
В частности, toString
используется для печати и сброса объектов и должен быть доступен для всех объектов.
Ответ 3
При переопределении любого метода видимость переопределения должна быть как минимум видимой, как базовый метод.
Ответ 4
При переопределении любого метода видимость переопределения должна быть равно или больше, чем видимость базового метода
Ответ 5
При переопределении метода вы должны объявить видимость переопределенного метода как такового в базовом классе или более широком.
Вот заметка об основных правилах, которые я сам написал в качестве ссылки на меня:
/* Модификаторы доступа */
1- Модификатор доступа у ребенка должен быть таким же или большим (последовательность: public - protected - default (package-private) - частный). доступ модификатор в родительском объекте не должен быть закрытым. Если у ребенка нет доступа к родительскому методу, а затем переопределить метод без Аннотации @Override будут рассматривать его как новый метод.
/* Типы возвращаемых данных */
2- Тип возврата в дочернем случае должен быть того же класса или подкласса.
/* Исключения */
3- Если родительский метод выбрал исключенное исключение, метод может: a-бросить то же исключение или подкласс. b- не бросить любые исключения. c-throw исключения времени выполнения.
4- Если родительский метод выбрасывает исключение без исключения, метод может: а) не бросать никаких исключений. b-throw runtime исключения.
5- Если метод parnet не генерирует исключение, тогда метод может: а) не бросать никаких исключений. b-throw runtime исключения.
Ответ 6
Поскольку вы переопределяете метод, вы должны определить его как метод прототипа или более того.
Ответ 7
когда вы переопределяете видимость класса подкласс, должен быть шире родительского класса.
Более широкий порядок:
общественности по умолчанию защищенный частный