У меня есть иерархия классов, который выглядит примерно так:метод вызова динамического типа
class Parent { }
class Child1 extends Parent {}
class Child2 extends Parent {}
class Child3 extends Parent {}
В другом классе я методы глядя, как это:
void doSomething(Parent p) { //default }
void doSomething(Child1 c) { //implementation for Child 1 }
void doSomething(Child2 c) { //implementation for Child 2 }
В настоящее время, когда у меня есть что-то вроде этот
Parent p = new Child2();
doSomething(p);
первый метод, doSomething(Parent)
вызывается вместо doSomething(Child2)
Предположим, у меня есть список элементов со статическим типом родителя и динамическим типом ChildN. Как я могу заверить, что метод, предоставляемый для динамического типа, называется без кастинга. Только для Child3 (никакого специального метода doSomething) Я хочу вызвать реализацию по умолчанию.
Спасибо, я бы сделал это, но я не может редактировать мои родительские или дочерние классы – Karl
@Karl Да, здесь вам, возможно, придется изменить класс родителя, реализующий интерфейс и другой класс.Если это невозможно, тогда вам, возможно, придется проверить с помощью instanceof, что ухудшит производительность. – Beniton