Ответ 1
Для экземпляра
Character.Gorgon gor = new Character.Gorgon();
Тогда do
gor instanceof Monster
Для экземпляра класса выполните
Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);
Как проверить, реализует ли какой-либо класс интерфейс? При наличии:
Character.Gorgon gor = new Character.Gorgon();
как проверить, реализует ли gor
интерфейс Monster
?
public interface Monster {
public int getLevel();
public int level = 1;
}
public class Character {
public static class Gorgon extends Character implements Monster {
public int level;
@Override
public int getLevel() { return level; }
public Gorgon() {
type = "Gorgon";
}
}
}
Правильно ли метод getLevel()
переопределен в Gorgon
, поэтому он может вернуть level
нового gor
?
Для экземпляра
Character.Gorgon gor = new Character.Gorgon();
Тогда do
gor instanceof Monster
Для экземпляра класса выполните
Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);
Использование
if (gor instanceof Monster) {
//...
}
В общем случае для AnInterface
и anInstance
любого класса:
AnInterface.class.isAssignableFrom(anInstance.getClass());
Если вы хотите использовать метод типа public void doSomething([Object implements Serializable])
, вы можете просто ввести его так: public void doSomething(Serializable serializableObject)
. Теперь вы можете передать ему любой объект, который реализует Serializable, но с помощью serializableObject
у вас есть только доступ к методам, реализованным в объекте, из интерфейса Serializable.