tach! 
in meinem buch bin ich nun bei interfaces abgelangt und dort gibts auch ein schönes beispiel:
was passiert beim aufruf 'z1.sendeNachricht("Neues Haushaltsloch von 30 Mrd. Euro");'? es gibt ja 2 möglichkeiten, entweder wird die methode 'empfangeNachricht(String nachricht)' der Klasse Vermittler3 oder die methode 'empfangeNachricht(String nachricht)' der klasse person3 aufgerufen werden. ich denke aber, dass zuerst die methode 'empfangeNachricht(String nachricht)' der klasse vermittler3 aufgerufen wird und dann nach dem aufruf der methode 'sendeNachricht(String nachricht)' der klasse vermittler3, die methode 'empfangeNachricht(String nachricht)' der klasse person3 aufgerufen wird. nur, wie merkt der compiler da, welchen weg er gehen muss? ich hoffe ich konnte mich verständlich ausdrücken... :wink:
in meinem buch bin ich nun bei interfaces abgelangt und dort gibts auch ein schönes beispiel:
Code:
import java.util.Vector;
interface NachrichtenQuelle3
{
public void anmelden(NachrichtenEmpfaenger3 empf);
public void sendeNachricht(String nachricht);
}
interface NachrichtenEmpfaenger3
{
public void empfangeNachricht(String nachricht);
}
class Vermittler3 implements NachrichtenEmpfaenger3, NachrichtenQuelle3
{
private Vector vec = new Vector();
public void anmelden(NachrichtenEmpfaenger3 empf)
{
vec.add(empf);
}
public void sendeNachricht(String nachricht)
{
for (int i = 0; i < vec.size(); i++)
{
NachrichtenEmpfaenger3 ref =
(NachrichtenEmpfaenger3) vec.elementAt(i);
ref.empfangeNachricht(nachricht);
}
}
public void empfangeNachricht(String nachricht)
{
sendeNachricht(nachricht);
}
}
class Zeitung3 implements NachrichtenQuelle3
{
private String name;
private Vector vec = new Vector();
public void anmelden(NachrichtenEmpfaenger3 empf)
{
vec.add(empf);
}
public void sendeNachricht(String nachricht)
{
for (int i = 0; i < vec.size(); i++)
{
NachrichtenEmpfaenger3 ref =
(NachrichtenEmpfaenger3) vec.elementAt(i);
ref.empfangeNachricht(nachricht);
}
}
}
class Person3 implements NachrichtenEmpfaenger3
{
private String name;
private String vorname;
Person3(String name, String vorname)
{
this.name = name;
this.vorname = vorname;
}
public void empfangeNachricht(String nachricht)
{
System.out.println("an " + name + " " + vorname + ": " + nachricht);
}
}
public class VermittlerTest
{
public static void main(String[] args)
{
NachrichtenQuelle3 z1 = new Zeitung3();
Vermittler3 mittler = new Vermittler3();
z1.anmelden(mittler);
mittler.anmelden(new Person3("Fischer", "Fritz"));
mittler.anmelden(new Person3("Maier", "Hans"));
mittler.anmelden(new Person3("Kunter", "Max"));
System.out.println("Frankfurter Allgemeine Schlagzeile:");
z1.sendeNachricht("Neues Haushaltsloch von 30 Mrd. Euro");
System.out.println("Suedkurier Schlagzeile:");
z1.sendeNachricht("Bayern Muenchen Deutscher Meister");
}
}
was passiert beim aufruf 'z1.sendeNachricht("Neues Haushaltsloch von 30 Mrd. Euro");'? es gibt ja 2 möglichkeiten, entweder wird die methode 'empfangeNachricht(String nachricht)' der Klasse Vermittler3 oder die methode 'empfangeNachricht(String nachricht)' der klasse person3 aufgerufen werden. ich denke aber, dass zuerst die methode 'empfangeNachricht(String nachricht)' der klasse vermittler3 aufgerufen wird und dann nach dem aufruf der methode 'sendeNachricht(String nachricht)' der klasse vermittler3, die methode 'empfangeNachricht(String nachricht)' der klasse person3 aufgerufen wird. nur, wie merkt der compiler da, welchen weg er gehen muss? ich hoffe ich konnte mich verständlich ausdrücken... :wink: