Comment vérifier si une classe implémente une interface? Quand avoir:
Character.Gorgon gor = new Character.Gorgon();
comment vérifier si gor
implémente l'interface 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";
}
}
}
La méthode getLevel()
est-elle surchargée dans Gorgon
de manière à pouvoir renvoyer level
du nouveau gor
créée?
Par exemple
Character.Gorgon gor = new Character.Gorgon();
Alors fais
gor instanceof Monster
Pour une instance de classe, faites
Class<?> clazz = Character.Gorgon.class;
Monster.class.isAssignableFrom(clazz);
Utilisation
if (gor instanceof Monster) {
//...
}
En général pour AnInterface
et anInstance
de toute classe:
AnInterface.class.isAssignableFrom(anInstance.getClass());
Si vous voulez une méthode comme public void doSomething([Object implements Serializable])
, vous pouvez simplement la saisir comme ceci public void doSomething(Serializable serializableObject)
. Vous pouvez maintenant lui transmettre n'importe quel objet implémentant Serializable, mais en utilisant serializableObject
, vous avez uniquement accès aux méthodes implémentées dans l'objet à partir de l'interface Serializable.