mrjerk: Agile Softwareentwicklung (Kellerglosse)

Beitrag lesen

Moin,
Ein einfaches (konstruiertes und zugegeben etwas sinnloses) Beispiel:

  
public class SuperClass {  
   private int value = 5;  
  
   public int return6() {  
      return(this.value+1);  
   }  
}  
  
public class DerivedClass extends SuperClass {  
   // Mal angenommen das würde tatsächlich den Wert aus Superclass überschreiben  
   private int value = 6;  
}  
  
DerivedClass test = new DerivedClass();  
System.out.println(test.return6());  

Angenommen, wir könnten den private-Wert der SuperClass überschreiben.
Dann ist offensichtlich, dass dann die Public-Methode "return6()" auch überschrieben werden muss, wenn sie immer noch 6 zurück geben soll.

Soweit so gut...aber woher weiss ein Programmierer, der arglos den value mit 6 überschreibt, dass er auch die Methode return6() anpassen muss? Möglicherweise hat er den Source-Code für "SuperClass" gar nicht.
Im Worst case überschreibt er die Variable value, und die Methode return6 funktioniert danach nicht mehr, ohne dass er weiss, warum.

Durch die Deklaration mit "private" sorgt der Programmierer von "SuperClass" dafür, dass nicht versehtnlich interne Strukturen, die für das Funktionieren der Basisfunktionalität (in diesem Fall "Zurückgeben von 6" :) ) erforderlich sind, kaputt gemacht werden.

Notwendig ist das natürlich nicht. Es steht dem Programmierer von SuperClass frei, alle Methoden und Werte von "SuperClass" protected oder gar public zu machen, die Klasse würde dann genauso funktionieren. Durch die gezielte Benutzung von private, protected und public wird aber dafür gesorgt, dass Programmierer von abgeleiteten Klassen nur das tun, was sie gefahrlos tun können, ohne dass die Basis-Funktionalität der Klasse (die man ja erhalten will, wieso sonst würde man von der Klasse erben?) auseinanderfällt.

Die Frage, warum man private-Methoden/Eigenschaften einer Klasse nicht überschreiben kann ist also einfach: Weil der Programmierer der jeweiligen Klasse das nicht will, vermutlich aus guten Grund (andernfalls hätte er sie protected oder public gemacht ;)).

Viele Grüße,
Jörg