2014-02-11 2 views
0

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

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

Например:

public class ConcreteClass{ 

    private InnerClass inner = new InnerClass(); 

    public String fwMethod() { 
     return inner.method1(); 
    } 

    private class InnerClass extends AbstractClass { 
     public String method1(){ ...} 
     public String method2(){ ...} 
    } 
} 

Есть ли лучший подход?

+1

Похоже, ваш абстрактный класс может быть слишком велик, чтобы начать с ... вы контролируете его? –

ответ

0

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

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

  • Вы можете объявить подкласс как abstract ... хотя это означает, что вы не сможете его создать.

  • Вы можете реорганизовать базовые классы и интерфейсы так, чтобы ваш конкретный класс имел несколько абстрактных методов для реализации.

1

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

Пример, если вам нужно только аа, абы вместо аа, абы, ааа, ааЪ: класс А, методы аа, абы класса B, методы ааа, ааЪ B наследует от A.

Вашего бетонного класс наследует от A и имеет доступ только к aa и ab, избегая реализации aaa, aab.

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