почему мы не можем реализовать методы из интерфейса в абстрактный класс, не изменяя public?

интерфейс:

interface MasterPlan{
    void getRate();
}

абстрактный класс:

abstract class Plan implements MasterPlan{
    abstract void getRate();
} }

В этом случае я не могу реализовать интерфейс MasterPlan без использования модификатора public в методе getRate().

public abstract void getRate();

это работает с нормальным поведением.

Я знаю, что в интерфейсах модификатор по умолчанию default. в чем причина этой ошибки без модификатора public в реализованном абстрактном классе?


person Ishara    schedule 21.02.2019    source источник
comment
Я знаю, что модификатор по умолчанию используется в интерфейсах по умолчанию. ... тогда ваши знания ошибочны. Модификатор по умолчанию является общедоступным в интерфейсах. Этот выпуск даже является тому доказательством.   -  person Tom    schedule 21.02.2019
comment
Методы, определенные в интерфейсе, должны быть общедоступными по контракту.   -  person deHaar    schedule 21.02.2019
comment
В классе отсутствие модификатора доступа 'public' (или private) само по себе является декларацией доступа: он объявляет, что метод имеет доступ к частному пакету. Это поведение не меняется, даже если объявление метода реализует метод интерфейса. Таким образом, вы должны написать public так же, как и для любого другого общедоступного метода. И поскольку вы реализуете метод интерфейса, он действительно должен быть общедоступным.   -  person Kevin Anderson    schedule 21.02.2019
comment
Том и деХаар, да, уловили суть .. Это публично. не по умолчанию. Спасибо :)   -  person Ishara    schedule 21.02.2019


Ответы (2)


Вы сталкиваетесь с тем, что каждый метод в Interface равен public. Итак, если у вас есть abstract класс, реализующий Interface, методы, которые там есть, public. Вы не можете изменить видимость определенного метода.

person CodeMatrix    schedule 21.02.2019
comment
да, я понял .. Это публично. не по умолчанию. Спасибо :) - person Ishara; 21.02.2019

Все абстрактные, стандартные и статические методы в интерфейсе неявно общедоступны.

Интерфейс имеет методы, имеющие неявные свойства, и как только метод объявлен после этого, когда вы определяете или реализуете его, вы не можете изменить его модификатор доступа.

в противном случае вы можете объявить свой класс частным, защищенным и т. д.

документ Oracle, определяющий интерфейсы

вы можете попросить более желающих помочь.

person ayushs27    schedule 21.02.2019