2015-04-14 4 views
2

Я пытаюсь создать метод абстрактного класса в Java.Создание метода для абстрактного класса в java

Say B и C продлить абстрактные А.

В пределах существует способ void doSomething(???)

Я хочу B.doSomething(B) работать, но B.doSomething(C) не должен. Я также хочу, чтобы C.doSomething(C) работал, но C.doSomething(B) не должен. Это возможно?

EDIT: Я хочу, чтобы метод, который будет определен в А

EDIT 2: Используя ответ LaShane в ...

A b = new B(); 
A c = new C(); 
b.doSomething(c);//how can I prevent this? 
+0

1) B должен иметь возможность принимать только другие B в качестве аргумента, 2) B и C являются просто классами, расширяющими абстрактные A, 3) Generics, потому что я хочу, чтобы A определял метод, который в целом обрабатывает эту ситуацию. –

ответ

3

Вы можете реализовать это следующим образом:

abstract class A<T> { 
    abstract void doSomething(T obj); 
}; 

class B extends A<B> { 

    @Override 
    void doSomething(B obj) { 
    } 

}; 

class C extends A<C> { 

    @Override 
    void doSomething(C obj) { 
    } 

}; 
+0

Это очень cl ose к тому, что я ищу. См. Мое редактирование –

+1

@DaiwikDaarun, вы не можете полностью его предотвратить, но '((A) b) .doSomething (c);' будет выдавать предупреждение, и вы можете скомпилировать с помощью '-Werror' для обработки предупреждений как ошибок –

+0

@Sigismundus C extends A , а не B –

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