Interface als Datentyp

Mino1337

Mitglied
Hallo,

ich bin am Ausrasten, meine Aufgabenstellung ist

1. ˆzwei Wort-Objekte erzeugen und diese t1 und t2 zuweisen
ˆ2. das Attribut w von t2 an dasjenige von t1 anhängen durch das Aufrufen der Methode append

Die vorherigen 10 Aufgaben habe ich mal weggelassen.

Das ganze soll so Funktionieren das man ein Text an einen anderen hängen kann per methode die über die Schnittstelle festgelegt wurde.

Ich verstehe nicht wie ich das machen soll denn ich kann auf keine Methode von Wort mehr zugreifen wenn ich die Wort Objekte t1 und t2 zuweise :eek: ...

Ich sitz seid 4 Stunden an dieser Pille Palle Aufgabe :autsch:

Ich wäre wirklich sehr Dankbar wenn mich jemand über mein Unverständniss Aufklären würde.

Das Interface:
Java:
public interface Text {
void append(Text txt);
}

Wort:

Java:
public class Wort implements Text{

private String w;
		
public Wort(String a){
this.w = a;
}
		
public String getText(){
return this.w;
}
		
public void append(Text txt){
this.w = this.w + txt;
}

}


Testklasse

Java:
class TestText {

private Text t1;
private Text t2;
		
		
public static void main(String [] args){
		
Text t1 = new Wort("hoch");
Text t2 = new Wort("die Haende");

t1.append(t2);
		
System.out.println(""+t1.getText()+"");
		
}
}

Vielen Dank
 

strußi

Top Contributor
in der Aufgabe steht 2 Wort-Objects

Wort w = new Text();
wenn ich das um die uhrzeit richtig hinbekomme


du den text schöner zusammenführen mit String restult = string1.concat( string2); result kann auch string1 sein
 

sirkarpfen

Mitglied
Du benutzt hier den Interface Typ Text und weist ihm ein Wort-Objekt zu. Somit kennen t1 und t2 nur 1 Methode und das ist append(), getText() kannst du nur aufrufen wenn du auch 2 Wort-Objekte hast:

Java:
Wort t1 = new Wort();
Wort t2 = new Wort();
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Wenn du auf Instanzen des Interfaces auf die getText() Methode zugreifen möchtest MUSST du diese im Interface definieren

Quasi

Java:
public interface Text{

public void append(Text text);
public String getText();

}

Da getText() nun im interface definiert ist, kannst du es nach deinen Vorstellungen implementieren.

z.B

Java:
@Override
public String getText()           {return this.w}

Denn :

Jede klasse die ein Interface erfüllt ( implementiert ), MUSS zwingend alle Methoden bereitstellen die im Interface definiert sind.

Quasi ein Kontrakt (Verbindliche Abmachung / Vertrag) zwischen Interface und implementierender Klasse.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Naja oder man castet einfach auf Wort.

Ok, ich vergaß , oder halt per DownCast auf eine Realisierung ;)

Hier ein Beispiel:

Interface :

Java:
public interface Text {
	public void append(Text text);
}


Klasse Wort :
Java:
public class Wort implements Text {

	private String word;
	
	public Wort(String word) {
		this.word = word;
	}
	
	@Override
	public void append(Text text) {
		this.word = word +  " " + ((Wort)text).getText(); // Cast auf Wort !!!
	}
	
	public String getText(){
		return this.word;
	}
}

Klasse WortTest :
Java:
public class WortTest {
	
	public static void main(String[] args){
		
		Text t1 = new Wort("Hallo");
		Text t2 = new Wort("Welt");
		
		/* Das Funktioniert nicht da die Methode im Interface nicht definiert ist.
		 * t1.append(t2); 
		 */
		
		// um append (Wort) nutzen zu können musst du DownCasten von Text auf Wort 
		
		((Wort)t1).append(t2); 
		
		
		//Liefert einen String durch ein Auf Wort gecastetes Text Objekt
		String s2 = ((Wort)t1).getText();

		System.out.println(s2);
	}
}

Wenn du in der Klasse Wort, die append Methode implementierst :

Java:
@Override
	public void append(Text text) {
		this.word = word +  " " + ((Wort)text).getText(); // Cast auf Wort !!!
	}

da
Code:
word
ein String ist , kannst du diesen auch nur per
Code:
+ (concat)
zusammenfügen wenn du einen String übergibst, du übergibst hier allerdings ein Interface, also musst du das Interface auf einen Typ Casten der eine Methode besitzt welche einen String zurückliefert, in diesem Fall
Code:
Wort + getText();
.

so brauchst du später in deiner main Methode nur

Java:
((Wort)t1).append(t2);

aufrufen da der Cast von t2 auf wort bereits in der Methode realisiert ist.

andernfalls würde der append(); aufruf folgendermaßen aussehen / und du müsstest die implementierung der append(); Methode ändern, bzw. anpassen:

Java:
((Wort)t1).append(((Wort)t2));
 
Zuletzt bearbeitet:

Joose

Top Contributor
???:L ........ Aufpassen! ;)

Java:
......
  t1.append(t2); 
........

Gerade dieser Aufruf funktioniert so wie gewünscht :)
Hier wird die Implementierung in der konkreten Klasse verwendet!

Die wahrscheinlich beste Lösung wäre wie kaoZ vorgeschlagen hat, die "getText" Methode ebenfall im Interface zu deklarieren.


Das ist der Vorteil von Interfaces ... man muss nicht auf einen konkreten Type casten um eine Methode aus dem Interfaces aufzurufen.
Außerdem fehlt bei allen diesen Cast beispielen noch der Hinweis das man vor einem Cast prüfen sollte ob dieser überhaupt (fehlerfrei) möglich ist.
 
Zuletzt bearbeitet:

Mino1337

Mitglied
Wow vielen Dank es Funktioniert endlich =D. Das mit dem Downcasten war mir neu. Hat jemand einen Link wo das Explizit erklärt ist ? Die Erklärung von kaoZ ist zwar schon sehr gut gewesen und hat mir schonmal sehr weitergeholfen aber so Absolut verstanden habe ich die Syntax noch nicht.

Ich hatte ja ein Wort Objekt vom Typ Text welches zB t1 hiess oder ?

Java:
Text t1 = new Wort("hoch");

und hier

Java:
((Wort)t1).getText();

Muss ich das so verstehen das ich in den Wort-teil des Objektes t1 reingehe und nach der Methode getText() suche ? Also das dass Objekt aus Wort- und Text-teil besteht ?

Aufjedenfall FAT THX
 

Joose

Top Contributor
Muss ich das so verstehen das ich in den Wort-teil des Objektes t1 reingehe und nach der Methode getText() suche ? Also das dass Objekt aus Wort- und Text-teil besteht ?

Nein dein Objekt ist immer nur 1 Objekt und besteht nicht aus mehreren Teilen.
Durch den Typ einer lokalen Variable kannst du festlegen auf welche Methoden/Attribute eines Objektes man Zugriff hat.

Probiere es dir so vorzustellen:

Stelle dir dein Objekt als ein großes Regal mit vielen Fächern vor (jedes Fach entspricht einer public Methode bzw. einen public Attribut).
Wenn du mit dem Typ des konkreten Objektes arbeitest, hast du Zugriff auf alle diese Fächer.
Wenn du aber mit dem Interface Typ arbeitest hängt über dem Regal ein Tuch mit Löchern an den Stellen, wo ein Fach liegt welches im Interface definiert ist.

Sprich durch
Java:
    Text t1 = new Wort("hoch");
hast du zwar ein Objekt vom Type Wort. Aber da t1 vom Type Text ist wird der Zugriff auf die Methoden reduziert welche von dem Interface definiert sind.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Java:
 t1.append(t2);

funktionierte nur nicht weil ich vergessen hatte in der konkreten implementierung auf Wort zu casten !

man kann halt kein Objekt vom Typ Text per
Code:
+
einem String hinzufügen ;)

schlussendlich funktioniert es so natürlich auch , insofern in einer Konkreten realisierung korrekt implementiert wird

[EDIT]
auf Typprüfung mit instanceof oder .getClass() hatte ich aus gründen der übersichtlichkeit verzichtet
[/EDIT]

was das Casten angeht, ist es egal ob du eine Abstrakte Basisklasse oder ein Interface hast

solange Spezialisierungen dieser entweder das interface implementieren , oder die Basisklasse erweitern, kannst du von der Basisklasse einen Downcast auf eine Spezialisierung durchführen, um auf z.B spezielle Methoden der Klasse zugreifen zu können.

in deinem Fall hat dein Interface nur die Methode
Code:
append();


bedeutet das alle Objekte die du von einer Spezialisierung dieser Schnittstelle erstellst, welche das Interface Referenzieren nur auf Methoden dieses Interfaces zugreifen können.

eben
Code:
append();

Hier mal ein Beispiel, wenn es jetzt z.B beispiel eine Klasse Satz gäbe könnte diese über das Interface die jeweilige spezialisierte Methode verwenden wie sie in eben dieser Klasse implementiert ist.

Java:
public class WortTest {
	
	public static void main(String[] args){
		
		Text t1 = new Wort("Hallo");
		Text t2 = new Wort("Welt");
		
		Text t3 = new Satz("Ich bin ein");
		Text t4 = new Satz("verdammt langer Satz!");
		
		 t1.append(t2); 
		 t3.append(t4);
		 
		//Ausgabe mit vorherigem Cast auf String 
		String s2 = ((Wort)t1).getText();
		System.out.println(s2);
		
		//Ausgabe ohne vorherigen Cast auf String
		System.out.println(((Satz)t3).getSatz());
	}
}

Ausgabe :

Hallo Welt
Ich bin ein verdammt langer Satz!

[TIPP]
Wichtig hierbei ist das die Schnittstelle ( also das Interface ) nicht wissen muss wie genau deren Methoden implementiert werden , sondern es stellt lediglich die Funktionalität nach Außen zur Verfügung , und um die konkrete Umsetzung kümmern sich dann die Subklassen bzw. deren Spezialisierungen !
[/TIPP]
 
Zuletzt bearbeitet:

Joose

Top Contributor
man kann halt kein Objekt vom Typ Text per
Code:
+
einem String hinzufügen ;)

Stimmt, bei Interfaces geht das nicht, aber mit konkreten Klassen schon :)

[EDIT]
auf Typprüfung mit instanceof oder .getClass() hatte ich aus gründen der übersichtlichkeit verzichtet
[/EDIT]

Aber mit einem Satz darauf hinweisen, damit die Leute nicht einfach drauf los kopieren sondern sich vielleicht was dazu überlegen ;)
 

kaoZ

Top Contributor
Was Klassen und Objekte angeht:

Klassen sind Quasi der Bauplan für Objekte!

Sie legen fest welche Eigenschaften(Attribute) und Funktionen(Methoden) ein Objekt(Instanz) besitzt.

nehmen wir an du hättest eine Klasse Telefon, dann wäre dies z.B der Sammelbegriff/ eine allgemeine
Definition ( Abstraktion ).
Java:
public abstract class Telefon{...}

eine Konkrete Umsetzung(Spezialisierung) könnte somit die Klasse Handy darstellen.
Java:
public class Handy extends Telefon{...}

ein "echtes" Handy wäre dann Quasi eine Instanz(also ein über den Konstruktor der Klasse) erzeugtes Objekt.
Java:
Handy h = new Handy();

in diesem Fall wäre die Variable h , eine Referenz auf eine
Instanz(Objekt) vom Typ Handy, die Wiederrum eine Spezialisierung eines Telefons wäre.
und könnte somit an allen stellen für das eigentliche Objekt eingesetzt werden.

dieses Handy könnte dann z.b in der Klasse festgelegte Eigenschaften(Attribute) besitzen, z.B einen Namen
Java:
String name;

[TIPP](OO wäre hier eine Referenz auf ein Objekt vom Typ Name )[/TIPP]

und über eine funktion(Methode) zum telefonieren verfügen, welcher man eine Nummer in form eines Strings übergeben kann.
Java:
public void call(String number){...}


Hoffe das war halbwegs verständlich :)

hier geht es dann unter anderem um is-a und has-a
Beziehungen und Vererbung/Polymorphie.

ein Handy ist ein Telefon

ein Handy hat einen Namen

usw...usw...

falls du da fragen haben solltest immer raus damit , das würde hier sonst zu weit gehen xD

PS: In Java , bzw. allgemein in OOP sind alles Objekte ;)
 
Zuletzt bearbeitet:

Mino1337

Mitglied
Wow ich hab sogar was gelernt gerade =D Bisher schrieb ich Java rein Intuitiv was mich sogar die Prüfung bestehen lassen hat in der Uni =D jetzt geht das Lernen für dieses Semester evtl. ein bissl schneller =D Dankeschön ...:rtfm:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
I No Jakarta Enterprise Beans found with interface ignorieren? Java Basics - Anfänger-Themen 2
I No EJB found with interface of type Java Basics - Anfänger-Themen 12
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
Say Abstrakt oder Interface Java Basics - Anfänger-Themen 3
Say public/default Interface Java Basics - Anfänger-Themen 9
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
W Intuitive interface für Komponenten Java Basics - Anfänger-Themen 4
I Browser integriert in Desktop Applikation - Webcam interface not found Java Basics - Anfänger-Themen 26
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
J Interface Comparable<T> Java Basics - Anfänger-Themen 10
M Interface oder Vererbung? Java Basics - Anfänger-Themen 12
D Interface Verständisfrage Java Basics - Anfänger-Themen 8
U Interface | constructor injection Java Basics - Anfänger-Themen 5
J Interface Interface korrekt implementieren Java Basics - Anfänger-Themen 5
A Methoden Vererbung und Interface Java Basics - Anfänger-Themen 14
T Interface Map und Map.Entry Java Basics - Anfänger-Themen 4
U Interface als PAramter (Vergleich) und ein Error Java Basics - Anfänger-Themen 9
I Interface von einer EJB Klasse, um Code zu reduzieren Java Basics - Anfänger-Themen 1
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
I JSON und Interface Java Basics - Anfänger-Themen 3
Kotelettklopfer Kleines Testprogramm mit Interface und einer Usereingabe Java Basics - Anfänger-Themen 16
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
CptK Interface Functional interface mit mehreren Methoden Java Basics - Anfänger-Themen 6
L Interface & Comparable Java Basics - Anfänger-Themen 15
T Interface Java Basics - Anfänger-Themen 0
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
B Interface List - Objekt übergeben? Einzelnes Objekt geht, aber Liste nicht? Java Basics - Anfänger-Themen 4
B Best Practice Unschlüssig ob Vererbung oder Interface Java Basics - Anfänger-Themen 2
E abstrakte Klasse implementiert ein Interface Java Basics - Anfänger-Themen 40
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
S Interface Equals und hashCode Java Basics - Anfänger-Themen 16
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
B Collections Objektreferenz-ID in der Ausgabe (Comparator Interface) Java Basics - Anfänger-Themen 2
A Interface Kuddelmuddel Java Basics - Anfänger-Themen 4
C Collections List über Interface zugreifen Java Basics - Anfänger-Themen 32
S Interface Interface und seine Implementierung Java Basics - Anfänger-Themen 5
H abstract und interface Java Basics - Anfänger-Themen 4
F Interface Casting Java Basics - Anfänger-Themen 13
C Telefonliste mit interface implementieren Java Basics - Anfänger-Themen 30
L Klassen Kann eine Unterklasse einer abstrakten Klasse ein Interface implementieren? Java Basics - Anfänger-Themen 2
H Interface Java Basics - Anfänger-Themen 2
R Quicksort mit Interface Comparable Java Basics - Anfänger-Themen 6
T Interface Methode im Interface mit mehreren Parametern Java Basics - Anfänger-Themen 10
B Interface vs Abstract Java Basics - Anfänger-Themen 2
B Objekte zählen/ Vererbung/ Kopplung/ Interface/ Abstract Class Java Basics - Anfänger-Themen 5
pkm Interface Funktionales Interface lässt sich nicht implementieren. Java Basics - Anfänger-Themen 2
Kornblume Comparable Interface für Objektvergleiche nutzen Java Basics - Anfänger-Themen 15
I Comparator<T> Interface als Methodenparamter Java Basics - Anfänger-Themen 4
J OOP Wie sollte ich das organisieren (Abstract? Interface?) Java Basics - Anfänger-Themen 33
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
E Interface nur von abstrakter Klasse implementierbar?! Java Basics - Anfänger-Themen 1
J Vererbung Abstrake Klasse <-> Interface Java Basics - Anfänger-Themen 5
U Interface Bedeutung "Code to an interface rather than to an implementation." Java Basics - Anfänger-Themen 4
M Erste Schritte Prüfungsbeispiel: Interface / abstrakte Klassen Java Basics - Anfänger-Themen 8
M Maven Main-Methode Interface und Klasse Java Basics - Anfänger-Themen 2
R Interface Eigene Objekte in Listen sortieren mit Interface Comparable Java Basics - Anfänger-Themen 5
D Interface Amazon Skill Kit, Interface but method in other class? Java Basics - Anfänger-Themen 3
A Interface Abstrakte Interface Methode kann nicht benutzt werden Java Basics - Anfänger-Themen 10
J Compiler-Fehler class interface or enum expected Java Basics - Anfänger-Themen 1
T Vererbung und interface. Java Basics - Anfänger-Themen 1
N Interface Interface Erstellung Java Basics - Anfänger-Themen 3
kilopack15 Beziehung Interface - (abstrakte) Klasse -Unterklasse Java Basics - Anfänger-Themen 3
C Interface Fragen zum Interface Java Basics - Anfänger-Themen 7
Azazel Ist die abstract class das selbe wie ein interface ? Java Basics - Anfänger-Themen 33
K Interface: wie damit arbeiten Java Basics - Anfänger-Themen 4
lBlKha0s Fehlermeldung : class interface or enum expected Java Basics - Anfänger-Themen 9
T error: class, interface, or enum expected Java Basics - Anfänger-Themen 5
T Vererbung Interface Java Basics - Anfänger-Themen 5
F Interface aus anderem Package nutzen Java Basics - Anfänger-Themen 10
N Interface Daten einem Implementierten Interface zuweisen Java Basics - Anfänger-Themen 37
B Erste Schritte Wie definiere ich in Java ein Interface? Java Basics - Anfänger-Themen 6
L OOP Interface Prinzip? Java Basics - Anfänger-Themen 6
K Nutzung einer Klasse die das Iterator-Interface implementiert Java Basics - Anfänger-Themen 0
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
J Innerhalb Interfacemethode: Interface als Attribut Java Basics - Anfänger-Themen 2
A Frage zu Interface Java Basics - Anfänger-Themen 16
J Interface Java Basics - Anfänger-Themen 3
W Interface Java Basics - Anfänger-Themen 1
L Compiler-Fehler error: class, interface or enum expected Java Basics - Anfänger-Themen 2
G Interface java.util.Comparator: Wieso muss nur die Methode compare() implementiert werden Java Basics - Anfänger-Themen 2
N Generics Vererbung Wildcard Interface Java Basics - Anfänger-Themen 8
Shams Kann man von einem Interface aus auf die dieses implementierende Klasse zugreifen? Java Basics - Anfänger-Themen 4
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
J Frage zu dem Thema interface Java Basics - Anfänger-Themen 5
S Generics und Comparable Interface Java Basics - Anfänger-Themen 5
A Klasse,Vererbung,Interface,Singleton,Thread Java Basics - Anfänger-Themen 5
S Interface-Methode abrufen? Java Basics - Anfänger-Themen 2
P Vererbung Klasse erbt von abstrakter Klasse implementiert Interface Java Basics - Anfänger-Themen 2
M Konstanten in einem Interface definieren Java Basics - Anfänger-Themen 1
P interface Java Basics - Anfänger-Themen 1
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
K Interface Methoden überschreiben Java Basics - Anfänger-Themen 1
C Klassendesign / Wann Interface implementieren und wann Klassen vererben? Java Basics - Anfänger-Themen 3
A Interface in Collection (Liste) angeben Java Basics - Anfänger-Themen 2
G Interface klasse Java Basics - Anfänger-Themen 4
N Interface Interface (sinnvoll) erzeugen Java Basics - Anfänger-Themen 8
D Interface namen bekommen Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben