Aufgabe:
Definieren Sie eine abstrakte Basisklasse Net für Widerstandsnetze mit einem Datenelement
resistors vom Typ java.util.TreeSet, das die eindeutigen Namen (ID) aller
im Netz vorkommenden Widerstande als Strings enthalt.
Ferner gibt es
(a) eine abstrakte Methode ohm() mit Rückgabetyp double, das den Gesamtwiderstand
des Netzes zurückgibt;
(b) eine implementierte Methode show(), die die Menge resistors mit einer foreach-
Schleife durchläuft und alle IDs der Widerstände im Netz als String zurückgibt.
Frage: Wenn ich den TreeSet in Net implementiere, dann kann ich in einer Testklasse nicht mehr darauf zugreifen, bzw. Werte einfügen, auslesen und so weiter.
Bedeutet das, dass man nur in der Klasse wo man den Tree implementiert hat auf diesen zugreifen kann?
Es kommt darauf an, welchen Modifier zu verwendest (keinen, public, protected, private).
Mach es am besten so, wie es Oneixee5 gezeigt hat: Speichere es in einer private Variable und und sprich es über Methoden an, die auch extern zugänglich sind (package protected, protected oder public).
Man kann mit einem kleinen Trick - Fake-Implementierung - das Ganze aus einer Main-Methode testen.
Java:
publicclassApp{publicstaticvoidmain(String[] args){Net net =newNet(){@OverridepublicdoublegetAggregatedResistance(){// TODO Auto-generated method stubreturn0;}};
net.addResistor("666");}}
Dein Aufgabentext lässt einige Fragen offen. Es ist zu vermuten, dass das Ganze so gedacht ist, dass die abstrakten Methoden in einer abgeleiteten Klasse umzusetzen ist. Ansonsten bräuchtest du für a) ja nur den Header zu definieren und den Aufgabentext in die Dokumentation kopieren.
b) hingegen wird in der Klasse Net implementiert.
Damit deine abgeleitete Klasse das Treeset nutzen kann, müssen entweder das Treeset selbst (nicht zu empfehlen) oder die Zufriffsmethoden zumindest "protected" sein.
Damit deine abgeleitete Klasse das Treeset nutzen kann, müssen entweder das Treeset selbst (nicht zu empfehlen) oder die Zufriffsmethoden zumindest "protected" sein.
Da muss ich widersprechen. Man sollte das TreeSet evtl. besonders schützen, damit der ursprüngliche Sinn des TreeSet auch nach der Implementierung erhalten bleibt.
So ist sichergestellt, dass bei der Implementierung nicht einfach jemand this.resistors durch eine andere Instanz oder null ersetzen kann und die Delegate-Methoden können nicht einfach irgendwie "verbogen" werden.
Da muss ich widersprechen. Man sollte das TreeSet evtl. besonders schützen, damit der ursprüngliche Sinn des TreeSet auch nach der Implementierung erhalten bleibt.
Genau das sollte "nicht zu empfehlen" auch heißen. Damit die abgeleitete Klasse irgendwie darauf zugreifen kann, muss die Zugriffsmethode schon mindestens protected sein. Ist sie private, kann die abgeleitete Klasse nicht darauf zugreifen.
Ich denke, wir meinen schon das Selbe.
Sofern nicht irgend jemand anderes als eine abgeleitete Klasse darauf zugreifen muss, reicht protected, package protected und public wären dafür nicht notwendig.