Почему мой главный метод toString() должен быть общедоступным? - программирование
Подтвердить что ты не робот

Почему мой главный метод toString() должен быть общедоступным?

Я новичок в Java, и я изучаю основы. Я изучал метод toString и как переопределить его в своих классах. Мне просто интересно, почему toString быть public? это потому, что он определен так в классе Object?

4b9b3361

Ответ 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

когда вы переопределяете видимость класса подкласс, должен быть шире родительского класса.

Более широкий порядок:

общественности по умолчанию защищенный частный