public class Parent {
....
}
public class Child1 extends Parent {
....
public void foo() {
....
}
}
public class Child2 extends Parent {
....
public void foo() {
....
}
}
Здесь метод foo()
существует только в дочерних классах и НЕ МОЖЕТ быть добавлен в родительский класс (даже абстрактный метод). В этой ситуации, когда я хочу вызвать метод foo()
для obj
, который является ссылкой на класс Parent
, мне нужно использовать intanceof
с несколькими if..else
, которых я хочу избежать.
Parent obj = ...// Object of one of the child classes
obj.foo();
EDIT: Мне нужно использовать тип obj
только как Parent
. В противном случае я не смогу вызывать методы объекта obj, который существует в родительском классе.
Мое решение. Подход, о котором я думаю, состоит в том, чтобы определить интерфейс, скажем, FooInterface
с помощью метода foo()
, и позволить всем дочерним классам реализовать его, тогда я мог бы просто ввести obj
в этот интерфейс и вызвать foo( ) такой метод:
if(obj instanceof FooInterface){
((FooInterface)obj).foo();
}
Есть ли лучший подход? Или какое-то улучшение этого?
Parent
класс, так как не управляю им. - person Learner   schedule 06.05.2014