Как проверить, реализует ли объект интерфейс?

Как проверить, реализует ли какой-либо класс интерфейс? При наличии:

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?

Ответ 1

Для экземпляра

Character.Gorgon gor = new Character.Gorgon();

Тогда do

gor instanceof Monster

Для экземпляра класса выполните

Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);

Ответ 2

Использование

if (gor instanceof Monster) {
    //...
}

Ответ 3

В общем случае для AnInterface и anInstance любого класса:

AnInterface.class.isAssignableFrom(anInstance.getClass());

Ответ 4

Если вы хотите использовать метод типа public void doSomething([Object implements Serializable]), вы можете просто ввести его так: public void doSomething(Serializable serializableObject). Теперь вы можете передать ему любой объект, который реализует Serializable, но с помощью serializableObject у вас есть только доступ к методам, реализованным в объекте, из интерфейса Serializable.