Étant donné une classe de base base em>, c'est dit a em>, b em>, c em> étend base .
S'il y a une méthode spécifique m () em> seulement dans c em>. Pour appeler m () em>, vous devez d'abord déterminer si la classe donnée est le type de C em>, une du chemin consiste à utiliser: otherMethod(Base b){
b.m();
}
4 Réponses :
Si une classe plus loin, comme d'autres ont déjà cité l'exemple de MAINTENANT, lorsque vous concevez C code> a une méthode spécifique, la même chose ne doit pas faire partie de la classe code> de base code>. Pour appeler la méthode
m () code>, vous devrez vérifier le type d'instance à l'aide d'une instance code> de l'opérateur code>, puis lancer votre
la classe code> class sur
C code> puis méthode d'appel
m () code> comme ci-dessous
collection code> et
list code>, si votre classe
C code> doit avoir une méthode spécifique, vous devez créer une interface
code>, disons son appelé
enfant code> qui devrait prolonger l'interface code> code>. Les 2 autres classes doivent mettre en œuvre une interface
base code>. Et classe
C code> doit mettre en œuvre une interface code> enfant p>
BASE CODE> interface, définitivement, vous avez gagné ' t sais quelles méthodes spécifiques d'autres classes pourraient mettre en œuvre. Par conséquent, vous ne devez pas appeler une méthode spécifique dans votre méthod également. P> p>
Il y a une erreur dans la compréhension des auteurs. L'auteur tente d'appeler la méthode à l'aide de l'objet de la classe de base. Bien que ce n'est pas une partie de celui-ci. Cela nécessite le casting de l'objet, sinon cela provoquera CLASSCASTEXCEPTION.Je ne disant que c'est la seule façon correcte. Comment suis-je me trompe ici?
@Manishbansal Désolé, j'étais tentant de donner un exemple rapide et je n'ai pas remarqué que c'est de ma faute. Mais ce que je cherche, c'est une réponse comme n'utilisant pas "l'instanceOf". Quoi qu'il en soit, merci!
Une autre option consiste à utiliser des méthodes de dépassement. Lorsque vous appelez Autresmethod () sur un objet de base, il appellera les Dothings () définis dans la base, sauf si elle est une instance de C, qui a surchargé les dothings ().
public class Base { public void doThings() { // nothing happens } public void otherMethod() { doThings(); // will call method above if instance is Base object, will call method below if C object } } class C extends Base { public void doThings() { System.out.println( "Things actually get done" ); } }
*****primordial
Si vous avez Java 8 et que la performance n'est pas un problème (ce qui serait le cas si vous souhaitez rendant 10000 formes à 60fps), puis filtrez la collection.
supposant une collection Collection<A> justA;
Collection<B> justB;
Collection<C> justC;
Ne pas infecter la conception plus loin que d'ajouter un puis écrivez le Ivisiteur Vous avez besoin (ici avec l'instance de c)
Bien sûr, vous pouvez simplement utiliser le consommateur au lieu de votre propre interface visiteur. Je voulais juste être clair. P> p> base.visit (ivisitor v) {V.visit (this);} code>
Si
m () code> appartient à
C code> et non à
base code>, il devrait être dans
C code>; Tout comme
get (int) code> appartient à la liste
code> et non à
collection code>. Vous pouvez toujours surcharge b>
autremethod (base) code> avec
autremethod (c c) code>
Quel est le cas d'utilisation? Faites-vous une itération sur une liste de code> code> et essayez d'appeler
m () code> sur chacun d'eux, iff le type est
C code>?
@Markjeronimus C'est ce que je vais faire. La classe de base est une classe de forme et un b c est différent de formes. Et je veux boucler toutes les formes et faire quelque chose que si la forme est C.
@ernest_k Surcharge pourrait être une solution que je recherche. Je vais essayer de le concevoir avec une surcharge, merci!
Ouais un cas d'utilisation ici nous aiderait vraiment à comprendre ce que vous essayez d'accomplir