почему при переопределении методов нужно сделать public ? В родительских их нет
Anonymous #2632922
35 уровень
почему методы без public не работают?
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #598481
29 мая 2022, 15:00
В интерфейсах все методы public по умолчанию
0
Anonymous #2632922
30 мая 2022, 13:12
то есть тут у интерфейса не default а public?
0
hidden #598481
30 мая 2022, 13:13
Я кода не вижу
0
hidden #598481
30 мая 2022, 13:18
default это не настройка уровня публичности
default это обозначение метода, имеющего стандартную реализацию в интерфейсе.
И он тоже публичный.
0
Anonymous #2632922
31 мая 2022, 08:02
ну к примеру метод в интерфейсе
public interface Movable {
boolean isMovable(); }
а после наследования
public static class Clothes implements Movable, Sellable, Discountable{
public boolean isMovable(){
return false; }
и тут если не написать public он не работает
0
Anonymous #2632922
31 мая 2022, 08:03
вы написали "И он тоже публичный". подробнее можете
0
hidden #598481
31 мая 2022, 08:41решение
Меня смутило, что ты написал default.
default - это ключевое слово, обозначающее метод в интерфейсе, который имеет реализацию. В твоём коде таких методов нет.
Как я и говорил, в интерфейсах все методы всегда public. Если написать так: то получится то же самое. Слово public можно просто не писать.
А когда ты переопределяешь какой-то метод, ты не можешь сузить его область видимости. Поэтому когда ты переопределяешь публичный метод, переопределённый метод тоже должен быть public, потому что это самая широкая из возможных областей видимости.
Возвращаясь к слову default, у тебя мог быть например такой интерфейс: Метод sayHello имеет реализацию, поэтому обозначен ключевым словом default, и этот метод тоже является public, поскольку он в интерфейсе. +2
Anonymous #2632922
31 мая 2022, 10:23
default void sayHello() {
System.out.println("hello"); }
вот в этом случае что означает default не область видимости, а то что это реализованный метод ? реализованные методы можно не переопределять?
0
hidden #598481
31 мая 2022, 11:10
Всё верно.
Областей видимости всего четыре: public > protected > package-private > private
default (англ. "по умолчанию") - метод с "реализацией по умолчанию". То есть если его не переопределить, то у всех классов, реализующих этот интерфейс, будет выполняться "стандартная" реализация этого метода из интерфейса.
0