hérité Dire que j'ai cette structure pour mon code:Laisser les méthodes de superclasse être mises en œuvre par une classe
public abstract class A{
public abstract Foo methodX();
public abstract Bar methodY();
}
public class B extends A {
public Foo methodX(){
// stuff
}
public Bar methodY(){
// more stuff
}
}
public class C extends A {
public Foo methodX() {
// stuff
}
public Bar methodY(){
// What to do?
}
}
public class D extends C {
public Bar methodY() {
// do stuff
}
}
public class F extends C {
public Bar methodY() {
// do different stuff
}
}
La raison pour moi de faire cela parce que j'ai plusieurs class
es étendant A
, ont tous méthode commune methodX()
et methodY()
et j'ai plusieurs class
es étendant B
tous ont des propriétés communes à B, mais doivent avoir différentes façons de faire methodY()
et ont différentes equals/hashcode.
alors, comment dois-je pour que 0.123.implémente le seul methodX()
mais laisse C et D implémenter methodY()
sans retourner null
ou ne rien faire dans methodY()
pour B
?
La classe «A» est-elle la seule qui soit abstraite? –
oui, je dois pouvoir initialiser le reste des classes –
Le point étant qu'une classe ne peut pas être instanciée sans savoir ce que toutes ses méthodes vont faire. Que cela soit fourni par une super méthode (non-abstraite), une classe anonyme, etc. – Rogue