защо не можем да внедрим методи от интерфейс към абстрактен клас, без да променяме 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
В клас липсата на 'публичен' (или 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