Frage zur 12. Übung

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Frage zur 12. Übung

Beitrag von Pibi »

Hallo!

Ich habe eine kleine Verständisfrage zur 1. Aufgabe der 12. Übung. Und zwar erbt die Klasse SerialResistorNet von der Klasse AbstractResistorNet, die wiederum das Interface Resistor impementiert.

In SerialResistorNet soll der Gesamtwiderstand in der Methode ohm() berechnet werden. In der Musterlösung wird das wie folgt gemacht:
public double ohm() {
return r1.ohm() + r2.ohm();
}

Meine Frage ist jetzt: weder in AbstractResistorNet noch in Resistor ist ohm() näher spezifiziert. Das ist nur in SimpleResistor der Fall, aber der hat offensichtlich keinen Einfluss auf SerialResistorNet. Woher also weiß meine ohm-Methode in SerialResistorNet, was r1.ohm() etc bedeutet, sprich, dass ohm() den Widerstandswerd zurückgibt, wenn diese "Überklassen-Methoden" (inkl. Interface) keine Informationen darüber liefern?

Ich hoffe, meine Frage ist einigermaßen klar geworden. Vielen Dank im Voraus für jede Hilfe!!

Liebe Grüße
PiBi

PS:Welche Rolle spielt SimpleResistor eigentlich überhaupt? V
Zuletzt geändert von Pibi am 29. Jul 2009 18:12, insgesamt 1-mal geändert.

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Frage zur 12. Übung

Beitrag von Daniel S. »

Hallo.
Pibi hat geschrieben:Woher also weiß meine ohm-Methode in SerialResistorNet, was r1.ohm() etc bedeutet, sprich, dass ohm() den Widerstandswerd zurückgibt, wenn diese "Überklassen-Methoden" (inkl. Interface) keine Informationen darüber liefern?
r1 und r2 sind ja irgendwelche Implementierungen von speziellen Resistoren, die nunmal eine ohm()-Methode bereitstellen müssen. In der Praxis können das z.B. zwei SimpleResistoren sein. Ein AbstractResistorNet kann es nicht sein, da es nicht Instanziierbar ist, weil es die ohm()-Methode nicht implementiert, wie Sie schon sagen. Eine Instanz vom Interface Resistor kann es auch nicht, weil new Resistor() nicht funktioniert, da ohm() nicht implementiert ist, wie sie schon sagen.
Alles klar?
Mit freundlichen Grüßen
Daniel

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Re: Frage zur 12. Übung

Beitrag von Pibi »

Hm.....hab ich das richtig verstanden, dass die ohm-Methode nur dann aufgerufen werden kann, wenn ich wie in der Testklasse deklariere, dass mein Objekt von der Art SimpleResistor ist?
Es hat mich nur gewundert, dass bei sowas keine Fehlermeldung beim Compilieren auftritt, denn bevor ich die Testklasse habe(und damit die Information, dass mein Objekt ein SimpleResistor ist), besteht doch keinerlei Zusammenhang, sprich keine Information, was die Klasse ohm() liefern soll (bei SerialResistorNet z.B.). Sehe ich das denn richtig?

Daniel S.
Mausschubser
Mausschubser
Beiträge: 87
Registriert: 25. Sep 2007 12:28
Wohnort: Mörfelden

Re: Frage zur 12. Übung

Beitrag von Daniel S. »

Ja, ja, der Wert bzw. die ohm()-Methode wird ja auch erst zur Laufzeit bestimmt, je nach Klasse, die das Interface Resistor implementiert und auch die ohm()-Methode bereitstellt wird dann der entsprechende Wert zurückgegeben.

Es kommt keine Fehlermeldung bei SerialResistorNet weil eine spezielle Instanz von Resistor (etwas das mit new erstellt wird, z.B. ein SimpleResistor) immer die ohm()-Methode implementiert. Es kann nicht sein, dass eine Instanz von einem Interface oder einer abstrakten Klasse erstellt wird, z.B. von Resistor, die keine ohm()-Methode implementiert.
Das ist ja gerade Sinn von Interfaces und Abstrakten Klassen, dass man verschiedene Implementierungen verwenden kann ohne sie direkt zu kennen. Es genügt zu wissen über welche Schnittstellen Nachrichten ausgetauscht werden können, also welche Methoden eines Objekts durch das Interface zur Verfügung stehen.
Mit freundlichen Grüßen
Daniel

Pibi
Erstie
Erstie
Beiträge: 19
Registriert: 18. Mai 2009 19:09

Re: Frage zur 12. Übung

Beitrag von Pibi »

Ich glaub, das hab ich jetzt verstanden =) Vielen lieben Dank für deine Hilfe!!!

Antworten

Zurück zu „Archiv“