2017-02-11 2 views
-2

tout le monde, cela peut sembler un peu étrange, mais je veux définir la valeur d'une variable super classe et le définir égal à quelque chose qui sera dans la sous-classe. Par exemple, j'ai une classe abstraite appelée SpriteBody, et dans une méthode appelée def, je veux définir la variable bodyType à quelque chose qui est défini dans Block qui s'étend SpriteBody comment puis-je faire quelque chose comme ça? Je pourrais faire cela dans l'autre sens, en définissant la valeur d'une super classe, et en utilisant la variable dans la méthode de la super classe, mais je pourrais écrire moins de code si je pouvais le faire en premier.Modifier la variable super classe java à partir de la classe héritée

+1

Pouvez-vous montrer un exemple de code? Essayez d'ajouter des commentaires à ce sujet. –

+0

Comment votre code actuel ne fonctionne-t-il pas pour vous? S'il vous plaît montrez-le. –

+0

Les variables d'instance protégées définies dans la super classe sont héritées par la sous-classe, vous ne devriez donc rien faire de spécial pour y accéder. –

Répondre

1

La superclasse abstraite peut déclarer une méthode abstraite pour la sous-classe à implémenter. Par exemple:

public abstract class SpriteBody { 
    private BodyType bodyType; 

    protected abstract BodyType determineBodyType(); 

    public void def() { 
     bodyType = computeBodyType(); 
    } 
} 

public class Block extends SpriteBody { 
    @Override 
    protected BodyType determineBodyType() { 
     // ... TODO ... 
    } 
} 

Cela dit, l'héritage est un peu un champ de mines, et ce genre d'approche peut conduire à un couplage complexe entre la classe de base et les classes d'enfants, qui peut rendre très difficile de faire en sorte que toutes les classes enfants se comportent correctement et préservent les bons invariants. Donc, même si ce qui précède est parfaitement valide, il pourrait être utile de jeter un second regard pour voir si vous pouvez atteindre vos objectifs en utilisant la composition plutôt que l'héritage.