JAVA , appele des méthodes
kadis500
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai deux classe MatriceTableau et MatriceCreuse qui héritent d'une classe abstract AbstractClass, et cette dernière implémente une interface MatriceCarree, cette interface contient une méthode "ajoute" qui permet de faire l'addition entre deux matrice.
j'ai redéfinit la méthode "ajoute" de l'interface dans MatriceTableau;MatriceCreuse et AbstractClass
Si les deux matrice sont de type MatriceTableau (resp MatriceCreuse) alors la méthode "ajout" de la classe MatriceTableau (resp MatriceCreuse) est exécutée.
Sinon les deux matrices sont de type différentes alors la méthode "ajout" de la classe AbstractClass est éxécuté
LA structure de mon programme est la suivante:
public interface MatriceCarree {
void ajoute (MatriceCarree m) throws IllegalArgumentException ;
}
public abstract class AbstractClass implements MatriceCarree {
public void ajoute(AbstractClass matrice) throws IllegalArgumentException {
blabla}
}
public class MatriceTableau extends AbstractClass {
public void ajoute(MatriceCarree m) {
if (m instanceof MatriceTableau) {traitement1}
else super.ajoute((AbstractClass)m);
}
public class MatriceCreuse extends AbstractClass {
public void ajoute(MatriceCarree m) {
if (m instanceof MatriceCreuse) {traitement1}
else super.ajoute((AbstractClass)m);
}
Mon problème est que c'est la méthode "ajout" de la classe AbstractClass qui est toujours éxécuté.
Merci pour votre aide
J'ai deux classe MatriceTableau et MatriceCreuse qui héritent d'une classe abstract AbstractClass, et cette dernière implémente une interface MatriceCarree, cette interface contient une méthode "ajoute" qui permet de faire l'addition entre deux matrice.
j'ai redéfinit la méthode "ajoute" de l'interface dans MatriceTableau;MatriceCreuse et AbstractClass
Si les deux matrice sont de type MatriceTableau (resp MatriceCreuse) alors la méthode "ajout" de la classe MatriceTableau (resp MatriceCreuse) est exécutée.
Sinon les deux matrices sont de type différentes alors la méthode "ajout" de la classe AbstractClass est éxécuté
LA structure de mon programme est la suivante:
public interface MatriceCarree {
void ajoute (MatriceCarree m) throws IllegalArgumentException ;
}
public abstract class AbstractClass implements MatriceCarree {
public void ajoute(AbstractClass matrice) throws IllegalArgumentException {
blabla}
}
public class MatriceTableau extends AbstractClass {
public void ajoute(MatriceCarree m) {
if (m instanceof MatriceTableau) {traitement1}
else super.ajoute((AbstractClass)m);
}
public class MatriceCreuse extends AbstractClass {
public void ajoute(MatriceCarree m) {
if (m instanceof MatriceCreuse) {traitement1}
else super.ajoute((AbstractClass)m);
}
Mon problème est que c'est la méthode "ajout" de la classe AbstractClass qui est toujours éxécuté.
Merci pour votre aide
A voir également:
- JAVA , appele des méthodes
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Java apk - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
1 réponse
Sauf dans des cas très précis (pour redéfinir des méthodes de la classe Object, ou pour identifier les types templates par exemple), tu ne devrais pas avoir de instanceof dans ton code !
Il y a très certainement un problème de conception dans ta structure de classe.
Par exemple ici, n'y a pas de raison que ajout soit une méthode de l'interface MatriceCarree, elle devrait plutôt être une méthode d'une interface Matrice dont hériterait MatriceCarree et les autres.
Voici le genre d'arborescence qui paraît un peu plus adapté à ton problème :
Il y a très certainement un problème de conception dans ta structure de classe.
Par exemple ici, n'y a pas de raison que ajout soit une méthode de l'interface MatriceCarree, elle devrait plutôt être une méthode d'une interface Matrice dont hériterait MatriceCarree et les autres.
Voici le genre d'arborescence qui paraît un peu plus adapté à ton problème :
interface Matrice<E> { public void ajouter(Matrice<E> m); } interface MatriceCarree<E> extends Matrice<E> { public double determinant() throws ArithmeticException; } class MatriceTableau<E> implements Matrice<E> { @Override public void ajouter(Matrice<E> m) { } } class MatriceCreuse<E> implements Matrice<E> { @Override public void ajouter(Matrice<E> m) { } } class MatriceCarreTableau<E> extends MatriceTableau<E> implements MatriceCarree<E> { @Override public double determinant() throws ArithmeticException { return 0; } } class MatriceCarreCreuse<E> extends MatriceCreuse<E> implements MatriceCarree<E> { @Override public double determinant() throws ArithmeticException { return 0; } }La confiance n'exclut pas le contrôle