2011-01-28 2 views
3

Мы не можем декларируем абстрактные методы в интерфейсе, как защищены и по умолчанию (даже если мы не упоминаем любой спецификатор доступа (по умолчанию) компилятор воспринимает это как общественность)Различных правила для абстрактных методов в абстрактном классе и интерфейсе

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

Почему существуют разные правила для абстрактного класса и интерфейса?

ответ

2

мы не можем объявлять абстрактные методы в интерфейсе, как защищены и defaul

цель интерфейса является просто объявить контракт. ваш клиент выполнит его, и для этого он должен быть public.

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

Update: по вашему вопросу

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

public class BaseAbstractClass { 
    private Connection getConnection(){ 
     //somecode 

    } 

    public boolean save(){ 
     //get connection and do something 
     //return ; 
    } 

//your implementor is left to implement it , he can use save method but can'ge see what it does i mean i doesn't have access to getConnection 
    public abstract void saveEntity(); 

} 
+0

Метод abstrct в абстрактном классе также имеет контракт с подклассами, которые будут давать реализацию абстрактного метода в абстрактном классе ... но они могут объявлять как защищенные и по умолчанию – saravanan

+0

, где разница между интерфейсом и абстрактным классом, интерфейсом являются чистым контрактом, где абстрактный класс может иметь некоторую общую строгую реализацию –

+0

, но у меня есть путаница. Я знаю, что класс abstratc может иметь как абстрактные методы, так и не абстрактные методы (реализованы), но интерфейс представляет собой 100% абстрактный класс. случаи, когда кто-то собирается реализовать абстрактные методы, иначе они будут помечены как abstarct..but абстрактные классы могут объявить свой абстрактный метод как защищенный и default ..why – saravanan

6

Поскольку абстрактные методы абстрактных классов предназначены для крючков для подклассов. С другой стороны, интерфейсы не связаны с деталями реализации - это всего лишь контракты с «внешним миром». И защищенный метод - это деталь реализации.

+0

я не могу получить you..can вы дать мне еще одно объяснение для этого question..i знать что абстрактный класс должен быть расширен ... и интерфейс должен быть реализован. – saravanan

+1

причина в основном теоретическая. интерфейсы определяют контракты, абстрактные классы предоставляют частичные реализации. В контракте вы не должны определять детали реализации. – Bozho

Смежные вопросы