Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Préférer son grand parent à son parent

6 réponses
Avatar
ownowl
Bonjour à tous

j'ai :

class A {

protected String uneMethode() {
return "A";
}
}

class B extends A{

protected String uneMethode() {
return "B" + super.uneMethode();
.....
}
}

class C extends B {

protected String uneMethode() {
return "C" + uneSortedeSuperSurleGrandParent();
}
}

dans uneMethode de la classe C je peux facilement appeler uneMethode de
la classe B par super.uneMethode()

mais est-il possible de schynter uneMethode de la classe B, c'est à dire
que depuis uneMethode de la classe C, je puisse faire appel à uneMethode
de la classe A (sans passer par B)
de telle sorte que new C().uneMethode() retourn "CA"


Olivier

6 réponses

Avatar
David JOURAND
Bonjour,


ownowl a écrit :

mais est-il possible de schynter uneMethode de la classe B, c'est à dire
que depuis uneMethode de la classe C, je puisse faire appel à uneMethode
de la classe A (sans passer par B)
de telle sorte que new C().uneMethode() retourn "CA"


Je pense que vous avez plutôt un problème au niveau de la conception de
votre modèle objet. Sans doute B et C devraient-elles hériter de A, ou
hériter de A', elle-même héritant de A...


--
David Jourand

Avatar
ownowl
Bonjour,




mais est-il possible de schynter uneMethode de la classe B, c'est à dire
que depuis uneMethode de la classe C, je puisse faire appel à uneMethode
de la classe A (sans passer par B)
de telle sorte que new C().uneMethode() retourn "CA"



Je pense que vous avez plutôt un problème au niveau de la conception de
votre modèle objet. Sans doute B et C devraient-elles hériter de A, ou
hériter de A', elle-même héritant de A...


effectivement j'avoue que c'est pas très propre, mais c'est à cause
d'une évolution un peu sioux qui sort en partie du modéle d'origine sur
un systeme en place, et ca aurait été un moyen de résoudre mon problème
en deux coups de cuillère à pot.

Olivier


Avatar
David JOURAND
ownowl a écrit :

effectivement j'avoue que c'est pas très propre, mais c'est à cause
d'une évolution un peu sioux qui sort en partie du modéle d'origine sur
un systeme en place, et ca aurait été un moyen de résoudre mon problème
en deux coups de cuillère à pot.


Pour l'avoir souvent fait, je vous comprends... mais la sagesse voudrait
que vous refactorisiez un peu le code, pour ne pas avoir à faire
encore plus sioux la prochaine fois ;-)


--
David Jourand

Avatar
ownowl


effectivement j'avoue que c'est pas très propre, mais c'est à cause
d'une évolution un peu sioux qui sort en partie du modéle d'origine sur
un systeme en place, et ca aurait été un moyen de résoudre mon problème
en deux coups de cuillère à pot.



Pour l'avoir souvent fait, je vous comprends... mais la sagesse voudrait
que vous refactorisiez un peu le code, pour ne pas avoir à faire
encore plus sioux la prochaine fois ;-)




La sagesse est-elle humaine ?

du coup dans le principe j'ai fait ça (non pas sur la tête ;-))

class A {

String str = "A";

protected String uneMethode() {
return uneMethode(this);
}

protected static String uneMethode(A a) {
return a.str;
}

}

class B extends A{

protected String uneMethode() {
return "B" + super.uneMethode();
}
}

class C extends B {

protected String uneMethode() {
return "C" + A.uneMethode(this);
}
}

ceci dit, la refactorisation dans ce projet est envisagée régulièrement,
et à therme on ne peut que s'en féliciter, mais dans ce cas c'est un peu
comme ouvir une noisette avec un rouleau compresseur


Avatar
Hervé AGNOUX
ownowl wrote:


mais est-il possible de schynter uneMethode de la classe B, c'est à dire
que depuis uneMethode de la classe C, je puisse faire appel à uneMethode
de la classe A (sans passer par B)
de telle sorte que new C().uneMethode() retourn "CA"



Non.

--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Syrion
Arg !
ça pue sérieusement.
Si tu as pu passer d'une méthode d'instance à un statique sans gêner,
c'est peut-être que dès le début il fallait mettre une méthode statique !
Définitivement il faut que C et B héritent de A. à mon avis ça ne doit
pas être trop dur à réécrire...


La sagesse est-elle humaine ?

du coup dans le principe j'ai fait ça (non pas sur la tête ;-))

class A {

String str = "A";

protected String uneMethode() {
return uneMethode(this);
}

protected static String uneMethode(A a) {
return a.str;
}

}

class B extends A{

protected String uneMethode() {
return "B" + super.uneMethode();
}
}

class C extends B {

protected String uneMethode() {
return "C" + A.uneMethode(this);
}
}

ceci dit, la refactorisation dans ce projet est envisagée régulièrement,
et à therme on ne peut que s'en féliciter, mais dans ce cas c'est un peu
comme ouvir une noisette avec un rouleau compresseur