Réponses
Trop de publicités?En bref, non, il n'est pas possible de supprimer une variable de classe.
Vous ne remplacent pas les variables de classe en Java vous cacher. Primordial est pour les méthodes d'instance. Le masquage est différent de primordial.
Dans l'exemple que vous avez donné, en déclarant la variable de classe avec le nom de " moi "dans la classe Fils vous cacher la variable de classe, il aurait hérité de sa super-Papa avec le même nom de "moi". Le masquage d'une variable dans cette façon de ne pas affecter la valeur de la variable de classe " moi " dans la superclasse Papa.
Pour la deuxième partie de votre question, de comment le faire imprimer "fils", j'avais définir la valeur par le constructeur. Bien que le code ci-dessous s'écarte de l'original de votre question beaucoup de choses, je voudrais écrire quelque chose comme ceci;
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
public void printName() {
System.out.println(name);
}
}
Le JLS donne beaucoup plus de détails sur la cacher dans la section 8.3 - Champ Déclarations
J'ai toujours le code de la flexibilité, parce qu'un jour, il peut avoir une fille, ou trouver une épouse. Ma devise est, si vous allez pour le remplacer ne pas fournir une implémentation concrète pour cela, utilisez toujours des abstractions. Cet exemple va vous montrer pourquoi. Voici une manière flexible à la conception de cette:
public interface Person {
public abstract String getName();
//this will be different for each person, so no need to make it concrete
public abstract void setName(String name);
}
Maintenant, nous pouvons ajouter le Papa:
public class Dad implements Person {
private String name;
public Dad(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
le fils:
public class Son implements Person {
private String name;
public Son(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
et Papa a rencontré une gentille dame:
public class StepMom implements Person {
private String name;
public StepMom(String name) {
setName(name);
}
@Override
public final String getName() {
return name;
}
@Override
public final void setName(String name) {
this.name = name;
}
}
On dirait que nous avons une famille, permet de dire au monde leurs noms:
public class ConsoleGUI {
public static void main(String[] args) {
List<Person> family = new ArrayList<Person>();
family.add(new Son("Tommy"));
family.add(new StepMom("Nancy"));
family.add(new Dad("Dad"));
for (Person person : family) {
//using the getName vs printName lets the caller, in this case the
//ConsoleGUI determine versus being forced to output through the console.
System.out.print(person.getName() + " ");
System.err.print(person.getName() + " ");
JOptionPane.showMessageDialog(null, person.getName());
}
}
}
Système.hors de Sortie : Tommy Nancy Papa
Système.l'erreur est la même que ci-dessus(juste a police rouge)
JOption De Sortie:
Tommy alors
Nancy puis
Papa