Frage zu Interface CodeBeispiel

Status
Nicht offen für weitere Antworten.

m@sQ

Aktives Mitglied
tach! 🙂

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:
 
Du hast wohl Person3 und Zeitung3 verwechselt, in Person3 gibt es ja gar keine entsprechende Methode sendeNachricht().

Zuerst wird die von Zeitung3, dann die von Vermittler3 aufgerufen.
 
jo hab ich verwechselt... :roll: aber warum wird zuerst die methode der klasse vermittler aufgerufen? weil mit dem code
Code:
NachrichtenEmpfaenger3 ref = (NachrichtenEmpfaenger3) vec.elementAt(i); 
ref.empfangeNachricht(nachricht);

wird ja auf ein object gecastet, das 'NachrichtenEmpfaenger3 ' implementiert. und das tun sowohl vermittler3 als auch zeitung3. warum geht das programm jetzt nach dem aufruf

Code:
ref.empfangeNachricht(nachricht);

in die methode 'empfangeNachricht(String nachricht)' von klasse vermittler3 und nicht in die von zeitung3?
 
jetzt haben wir irgendwie anenander vorbei geredet... :bae: hab eigentlich noch was anderes gemeint, aber ist mir nun selbst klar geworden :idea: aber danke trotzdem!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben