Supposons que nous voulons jeter objet d A,
A a = (C) d;
Donc, 3 règles internes ont été vérifiées par le compilateur et la JVM. Le compilateur vérifie les 2 premières règles au moment de la compilation et JVM vérifie la dernière règle au moment de l'exécution.
Règle 1 (compilation de temps à vérifier):
Type de 'd' et C doit avoir une certaine relation (enfant à l'enfant ou en même temps parent ou d'un parent ) .Si il n'y a relation alors nous obtiendrons une erreur de compilation (types inconvertibles).
Règle 2 (compilation de temps à vérifier):
'C' doit être soit même type ou type dérivé (sous-classe) de 'A' sinon nous aurons une erreur de compilation (incompatible les types).
Règle 3 (Runtime Exception):
type d'objet d'exécution de 'd' doit être identique ou dérivé d'un type de sinon nous aurons une exception d'exécution 'C' (ClassCastException Exception).
Trouvez des exemples ci-dessous pour obtenir plus d'idée,
String s = new String("hello"); StringBuffer sb = (StringBuffer)s; // Compile error : Invertible types because there is no relationship between.
Object o = new String("hello"); StringBuffer sb = (String)o; // Compile error : Incompatible types because String is not child class of StringBuffer.
Object o = new String("hello"); StringBuffer sb = (StringBuffer)o; // Runtime Exception : ClassCastException because 'o' is string type and trying to cast into StingBuffer and there is no relationship between String and StringBuffer.
Dans quelle situation avez-vous besoin en fait de jeter explicitement un objet à son type d'interface? – harto
Vous avez une réponse très utile ici. J'aimerais que vous le sélectionniez. – orbfish