Seite 2 von 2

Re: Übung 9

Verfasst: 8. Mär 2014 22:17
von Gast
SophiaLi1 hat geschrieben:
gast hat geschrieben: Außerdem ist mir unklar, wie die Methode getOhm() in der Klasse SerialResistor funktionieren soll. Die Methode getOhm() in der SerialResistor Klasse lässt das Objekt r1 vom Typ Resistor die Methode getOhm aufrufen. Die Klasse Resistor ist jedoch ein Interface, in dem die Methode getOhm jedoch nicht implementiert ist, wie kann das funktionieren?
Der statische Typ kann ein Interface sein, solange der dynamische Typ eines Objekts eine Klasse ist, in dem die Methode getOhm() implementiert ist.
Aus welcher Klasse stammt denn die Methode getOhm(), die von r1 aufgerufen wird? Aus SimpleResistor? Wenn ja, woher "weiss" r1, welche getOhm()-Methode es aufrufen soll, wenn mehrere Klassen das Interface implementieren?

Re: Übung09

Verfasst: 10. Mär 2014 20:06
von Gast
Ich versteh nicht , wie wir in der abstrakten Klasse AbstractResistorNet eine Objektvariable vom Interface Resistor erstellen können. ICh dachte man darf keine Objekt von einem Interface machen ?

Re: Übung09

Verfasst: 10. Mär 2014 20:53
von aDramaQueen
Java arbeitet von Innen nach Außen! Wenn man auf das Testobjekt:

Resistor r = new ParallelResistorNet(new SerialResistorNet(new ParallelResistorNet(r1, r3), r2),new ParallelResistorNet(new SerialResistorNet(r4, r5), r6));

die Methode aufruft:

r.getOhm();

fängt java nun bei der Innersten "Schachtelung" an. getOhm() funktioniert ja nur mit ints und nicht mit irgendwelchen Objekten, also MÜSSEN zuerst die inneren Werte ermittelt werden, damit dann die schließlich die Äußeren gerechnet werden können. Das ist im Übrigen auch der Grund warum die resistors()-Methode funzt. Für die Testklasse ergibt sich etwa folgendes Muster, wenn man für jede Schachtelung ne andere Klammer nimmt:

r = addieren[addieren{addieren(1,1),1}],[addieren{addieren(1,1),1}]

Das mit den Objekten is so ne Sache....
Bin mir bei folgender Aussage ned sicher: Das hier SimpleResistor instanziert wird, wenn du eigentlich das Interface instanzierst, hängt damit zusammen, das nur SimpleResistor als einzige nicht abstrakte Klasse Resistor implementiert. Hätten wir nun mehrere Klassen die nicht abstrakt wären und ebenfalls Interface implementieren, müssten wir genauere Angeben machen was es denn nun sein soll (Vgl. Miner-Projekt: "IModel modelXY = new Model()" hier wäre modelXY dann eben die spezifisch gemeinte Klasse die gewählt wurde). Ist aber in der Übung schlicht nicht nötig, weil es eben nur eine solche Klasse gibt...

Re: Übung09

Verfasst: 11. Mär 2014 13:56
von m_flaig
Hallo,

wie gewünscht ist nun auch eine Musterlösung zu Aufgabe 3b) in moodle online.

Viele Grüße,
M.Flaig