2013-02-21 3 views
1

У меня есть три класса Java. Первые два класса распространяются на ClassA, а последний распространяется на ClassB.Расширение общего класса

Class1 extends ClassA 

Class2 extends ClassA 

Class3 extends ClassB 

У меня есть несколько дублированных методов в трех классах (Class1-3). Для того, чтобы избежать необходимости их дублирования я добавил ClassCommon так:

Class1 extends (ClassCommon extends ClassA) 

Class2 extends (ClassCommon extends ClassA) 

Class3 extends ClassB 

Так что мои дублированные методы теперь в ClassCommon, но я до сих пор дублируется метод между Class3 и ClassCommon.

Надеюсь, я чувствую до сих пор.

Мой вопрос: есть в любом случае, используя общие типы, чтобы иметь такую ​​конфигурацию:

Class1 extends ClassCommon<ClassA> 

Class2 extends ClassCommon<ClassA> 

Class3 extends ClassCommon<ClassB> 

ClassCommon<E> extends E 
+2

Нет, нет. –

+0

все равно, чтобы избежать дублирования в моем примере? –

+0

Каков типичный параметр типа «E», который должен представлять? Любой тип? Один из ваших занятий? – rgettman

ответ

3

как о

Class1 extends ClassA 
Class2 extends ClassA 
Class3 extends ClassB 
ClassA extends ClassCommon 
ClassB extends ClassCommon 

или с интерфейсами:

Class1 extends ClassCommon implements ClassA 
Class2 extends ClassCommon implements ClassA 
Class3 extends ClassCommon implements ClassB 

Удачи!

+0

+1 для продвижения использования интерфейса и хороших методов ООП –

1

Я не знаю, что общая функциональность у вас есть, но попробуйте ClassCommon как корень вашей иерархии классов:

class ClassCommon<E extends ClassCommon<E>> 

class ClassA extends ClassCommon<ClassA> 

class ClassB extends ClassCommon<ClassB> 

class Class1 extends ClassA 

class Class2 extends ClassA 

class Class3 extends ClassB 
2

Использование ClassCommon в качестве корня иерархии.

public abstract class ClassCommon { 

    /* 
    * Your methods here. 
    */ 
} 

Тогда ...

public class ClassA extends ClassCommon 
public class ClassB extends ClassCommon 

... и ...

public class Class1 extends ClassA 
public class Class2 extends ClassA 
public class Class3 extends ClassB 
Смежные вопросы