Несколько абстрактных классов в многоуровневом наследовании - PullRequest
0 голосов
/ 05 июля 2011

У меня есть что-то вроде следующего:

public interface A
{ 
   ....
}

public abstract class AbstractClass implements A
{
   // Implements some methods from interface 
   ....
}

public abstract class GroupOne extends AbstractClass
{
   // Implements some methods from interface 
   // Define couple of abstract methods
   .....
}

public abstract class GroupTwo extends AbstractClass
{
   // Implements some methods from interface 
   // Define couple of abstract methods
   .....
}

public class ClassImpl extends GroupOne
{
   // Implement couple of abstract methods from GroupOne
}

public class AnotherClassImpl extends GroupTwo
{
   // Implement couple of abstract methods from GroupTwo
}

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

Это хороший дизайн?Причина, по которой я спрашиваю об этом, заключается в том, что я едва сталкивался с иерархией классов, в которой задействовано несколько абстрактных классов.

1 Ответ

2 голосов
/ 05 июля 2011

Я не вижу ничего плохого в таком дизайне. ArrayList - один из наиболее часто используемых классов с двумя абстрактными родительскими классами. Было бы полезно создать дополнительные абстрактные методы для частей интерфейсов GroupOne и GroupTwo, расширяющих интерфейс A.

...