2012-04-12 2 views
7

Это может показаться глупым вопросом, но я бы хотел знать «лучшие практики» при создании абстрактных методов. Должна ли их видимость быть открытой или защищенной?Стандартная видимость для абстрактных методов

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

ответ

10

Зависит от вашего прецедента. Если абстрактный метод реализует только часть большей функциональности, доступную из открытого метода в вашем абстрактном классе, то он, вероятно, должен быть защищен. Если это автономный метод, который может/должен быть вызван из другого класса, сделайте его общедоступным.

Примеры:

public abstract class Foo implements Closeable { 
    public final void close() { 
     // do whatever 
     doClose(); 
    } 

    protected abstract void doClose(); 
} 

public abstract class Bar { 
    public void read(byte[] b) { 
     for(int x = 0; x < b.length; x++) { 
      b[x] = read(); 
     } 
    } 

    public abstract int read(); 
} 
1

Я думаю, это зависит от того, что делает этот метод. Если это то, что представляет поведение класса (и подклассов), оно должно быть общедоступным. Если метод, реализуемый подклассами, является внутренним и используется другими методами базового класса (например, определение алгоритмической стратегии), он должен быть защищен.

2

Вот разница для общественности, защищены и частные:

Modifier

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

Вопрос №. 2: Да, это так.

+3

Это не то, что он попросил. Он спросил, какие лучшие практики были для абстрактного класса, а не для определения public/private/protected. –

+1

Да, и он может решить, что он хочет выбрать общественным или защищенным на основе моего объяснения. – Crazenezz

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