Как узнать подкласс от экземпляра базового класса?

Существует ли способ узнать название производного класса от экземпляра базового класса?

например:

class A{
    ....
}
class B extends A{
    ...
}
class c extends A{
    ...
}

теперь, если метод возвращает объект A, я могу узнать, имеет ли это тип B или C?

15
задан Bozho 18 May 2010 в 11:03
поделиться

4 ответа

используя instanceof или Class#getClass()

A returned = getA();

if (returned instanceof B) { .. }
else if (returned instanceof C) { .. }

getClass() вернет одно из: A.class, B.class, C.class

Внутри if-клаузы вам нужно будет понизить кастинг - т.е.

((B) returned).doSomethingSpecificToB();

Однако иногда считается, что использование instanceof или getClass() - плохая практика. Вы должны использовать полиморфизм, чтобы попытаться избежать необходимости проверки конкретного подкласса, но я не могу сказать вам больше с предоставленной информацией.

19
ответ дан 1 December 2019 в 02:10
поделиться

Вы пробовали использовать instanceof

например

Class A aDerived= something.getSomethingDerivedFromClassA();

if (aDerived instanceof B) {

} else if (aDerived instanceof C) {

}

//Use type-casting where necessary in the if-then statement.
5
ответ дан 1 December 2019 в 02:10
поделиться

Краткий ответ на ваш вопрос

Есть ли способ узнать имя производного класса из объекта базового класса?

нет , суперкласс не имеет возможности сообщить имя / тип подкласса.

Вы должны опросить объект (который является экземпляром подкласса) и спросить, является ли он: instanceof конкретным подклассом, или назвать его getClass () метод.

3
ответ дан 1 December 2019 в 02:10
поделиться

Я могу придумать два способа 1) Один с использованием API отражения Java 2) Другой может быть с instanceOf

Другой метод может быть Сравнение объектов с объектами, я не знаю, как это может быть, вы можете попробовать это

0
ответ дан 1 December 2019 в 02:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: