Verwendung von Interface

unknown

Bekanntes Mitglied
Hallo

Könnt ihr mir vielleicht erklären wozu man eigentlich Interfaces verwendet und wie sie genau funktionieren?
Ein einfaches, aber sinnvolles Beispiel wäre gut :)
und was sind abstarkte Methoden und Klassen?
 

ARadauer

Top Contributor
Man beschreibt von Etwas nur was es kann und somit muss derjenige der damit etwas macht nicht das Ding genau kennen...

Beispiel: KundenSpeicherer: Methode ... speicher(Kunde kunde); wie und was und wohin.. mir egal...
 

Andi_CH

Top Contributor
Ein Beispiel, dass mir zu abstrakten Klassen einfällt sind Menschen.

Banalisieren wir die Menschheit mal ein wenig, also bitte nicht kommen das Sprechen liesse sich auch über Attribute steuern und es gäbe auch noch Trans-Menschen, sonst stimmt mein Beispiel nicht mehr :D

Es gibt männliche und weibliche Menschen / die Klassen nennen wir mal "Frau" und "Mann" - die gemeinsamen Attribute und Methoden lagern wir aus in die Klasse "Mensch".

Da es aber in diesem Sinne keine Menschen sondern eben nur Männer und Frauen gibt, deklarieren wir die Klasse Mensch abstrakt

Die Meethode gehen könne wir schon in der Klasse Mensch implementieren, da alle Menschen exakt gleich gehen.

Wenn wir das Sprechen untersuchen, stellen wir fest, dass zwar alle Menschen sprechen können, Männer und Frauen das aber auf unterschiedliche Art (Tonhöhe, Rythmus etc.) machen, also deklarieren wir in der Klasse Mensch nur die Methode
Code:
public abstract void sprich(String text);
und wie es gemacht wird, muss in der Klasse Mann und Frau jeweils implementiert werden.
 
Zuletzt bearbeitet:
B

bygones

Gast
Da es aber in diesem Sinne keine Menschen sondern eben nur Männer und Frauen gibt, deklarieren wir die Klasse Mensch abstrakt
nur am rande: abstrakte Klassen sollten nur existieren, wenn man einen template implementierung eines Interfaces braucht, nicht zur Verhinderung von instanziierung.
 

Andi_CH

Top Contributor
... oder wenn sie abstrakte und konkrete Methoden beinhalten - ein Interface lässt ja nicht zu, dass man Methoden bereits implementiert.

Ausserdem ist meine Sicht die von UML und Java-Interfaces werden dort IMO als abstrakte Klassen dargestellt.
 
B

bygones

Gast
... oder wenn sie abstrakte und konkrete Methoden beinhalten - ein Interface lässt ja nicht zu, dass man Methoden bereits implementiert.
genau, deswegen ja meine Aussage bzgl der Template implementierung. Ich sagte, dass der einzige Grund einer abstrakten Klasse ist, dass sie als template eines Interfaces existiert. D.h. dass man dort Implementierungen drinnen hat, die allgemein gueltig sind und nicht von jeder Implementierung des interfaces erneut geschrieben werden soll.

Ausserdem ist meine Sicht die von UML und Java-Interfaces werden dort IMO als abstrakte Klassen dargestellt.
interfaces sind auch nix anderes als spezielle abstrakte Klassen.
 

Andi_CH

Top Contributor
... als template eines Interfaces ...

Was meinst du damit? Es gibt hunderte von abstrakten Klassen zu denen KEIN Interface existiert.
Ein Interface im Java Sinn ist ja nur ein Mechanimus um die Mehrfachvererbung auf eine sinvolle Art zu ermöglichen.

Ein Interface zeigt was eine Klasse kann, eine Superklasse sagt was eine Klasse ist (Das ist ein Zitat mit dem ich aber auch nicht zu 100% glücklich bin)
 
B

bygones

Gast
Was meinst du damit? Es gibt hunderte von abstrakten Klassen zu denen KEIN Interface existiert.
die reine Existenz einer Sache ist nicht gleichzusetzen mit seiner Berechtigung. Am Bsp von Swing sieht man was man fuer Probleme man hat wenn man keine Interfaces nutzt und einfach nur abstrakte Klassen. Und da man nicht einfach etwas nachmachen soll, nur weil es schon gibt, sollte man nur abstrakte Klassen einsetzen, wenn man eben eine Template Klasse eines Interfaces braucht.

Ein Interface im Java Sinn ist ja nur ein Mechanimus um die Mehrfachvererbung auf eine sinvolle Art zu ermöglichen.
Interfaces haben an sich nichts mit Mehrfachvererbung zu tun und warum das immer gesagt wird hat sich mir noch nie erschlossen. Nur weil versch. Klassen das selbe Interface implementieren sind sie nicht in einer Vererbungshierarchie.
 

faetzminator

Gesperrter Benutzer
Java:
public interface Named {
     public String getName();
}
Nun kann folgende Methode implementiert werden:
Java:
public static void printName(Named n) {
    System.out.println(n.getName());
}
Ob das nun ein Auto ist, welches [c]Named[/c] implementiert (und z.B. "Audi" zurückgibt) oder ein Mensch (welcher z.B. "Peter" zurückgibt), ist völlig egal.
 

faetzminator

Gesperrter Benutzer
Wenn du ein Interface [c]Named[/c] schreibst, dann wird das von dir auch irgendwo verwendet werden. Somit musst du auch sagen, was dort erscheinen (bzw. zurückgegeben werden) soll.
Mir fällt hier keine klarere Bezeichnung als "common name" ein... Beim Menschen wär das vielleicht der Rufname, könnte aber auch der Vorname sein. Dies ist vielleicht ein "ungenaues" Beispiel, da dieses nur für ein Sysout verwendet wird und wohl lediglich dem User bei der Identifikation eines Objektes behilflich sein soll.

Edit: Eine Anmerkung noch. Es gibt eine Methode [c]public String toString()[/c], welche von [c]Object[/c] implementiert wurde. Somit kann jedes beliebige Objekt diese Methode überschreiben. Die Beschreibung zu dieser Methode ist auch nicht genauer, als meine:
Returns a string representation of the object. In general, the toString method returns a string that "textually represents" this object. The result should be a concise but informative representation that is easy for a person to read. It is recommended that all subclasses override this method.

The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:

[Java]getClass().getName() + '@' + Integer.toHexString(hashCode())[/code]
 
Zuletzt bearbeitet:
S

SlaterB

Gast
Interfaces haben an sich nichts mit Mehrfachvererbung zu tun und warum das immer gesagt wird hat sich mir noch nie erschlossen. Nur weil versch. Klassen das selbe Interface implementieren sind sie nicht in einer Vererbungshierarchie.
wie definierst du Mehrfachvererbung/ Vererbungshierarchie?
durch die Java-Einschränkungen gibt es da eine gewisse Eingrenzung, als Polymorphie allgemein betrachtet stehen die implementierenden Klassen ja nun doch in irgendeiner Hierarchie zusammen, das ist ja gerade das Ziel
 

pro2

Bekanntes Mitglied
Java:
public Class Auto implements Named{
    @Override
    public String getName(){
         //mach irgendwas
    }
}
 

bandy

Bekanntes Mitglied
hmm.. kannst du kein konkretes Beispiel machen bei dem man sieht wo diese Methode getName definiert wird?

Genau, das will ich auch sehen, ich habe das gleiche Problem, das Buch Java ist auch eine Insel habe ich vor mir liegen und lese diese Kapiteln seit Tagen durch, aber den Sinn konnte ich bis jetzt nicht verstehen, nur das abstrakte Klassen von sich nicht erben lassen, aber selbst erben koennen. Ein praktischer Beispiel soll her und nicht nur einer :D
 

unknown

Bekanntes Mitglied
und was ist der Sinn der Sache?
man kann doch die Methode "getName" gleich in der Klasse "Auto" definieren, anstatt ein Interface zu generieren und dann die Methode zu überschreiben..
 

faetzminator

Gesperrter Benutzer
und was ist der Sinn der Sache?
man kann doch die Methode "getName" gleich in der Klasse "Auto" definieren, anstatt ein Interface zu generieren und dann die Methode zu überschreiben..

Dann kann ich aber nirgens in gemeinsamen Code alle Namen aller Autos und alle Namen aller Menschen ausgeben, da ich dann eine Methode [c]printName(Car c)[/c] und eine Methode [c]printName(Human h)[/c] erstellen müsste. Beide Objekte haben aber die Methode [c]getName()[/c] und beide [c]printName()[/c] Methoden machen exakt das gleiche.
 

faetzminator

Gesperrter Benutzer
Java:
public Car extends Named {

    private String name;

    public Car(String name) {
        this.name = name;
    }
    
    public String getName() {
        return name;
    }
}
Java:
public Human extends Named {

    private String nickName;

    public Car(String nickName) {
        this.nickName= nickName;
    }
    
    public String getName() {
        return nickName;
    }
}

Und hier verwenden wir das:
Java:
List<Car> cars = new ArrayList<Car>();
cars.add(new Car("Audi"));
cars.add(new Car("BMW"));
// ...

List<Human> humans = new ArrayList<Human>();
humans.add(new Human("faetzminator"));
humans.add(new Human("just"));
// ...

for (Car c : cars) { // durch alle Cars iterieren
    printName(c);
}

for (Human h : humans) { // das gleiche mit den Menschen
    printName(h);
}

Wenn du nun das Interface implementiert hast, kannst du eine solche Methode schreiben:
Java:
public static void printName(Named n) {
    System.out.println(n.getName());
}
Wenn du das nicht hast, dann schreibst du folgende zwei Methoden:
Java:
public static void printName(Car c) {
    System.out.println(c.getName());
}

public static void printName(Human h) {
    System.out.println(h.getName());
}
 
G

Gast2

Gast
Ohne Interface:
Java:
public class InterfaceExample {

	public static void main(String[] args) {
		Person p1 = new Person("Hans");
		Person p2 = new Person("Peter");
		Car c = new Car("Audi");
		
		printName(p1);
		printName(p2);
		printName(c);
	}
	
	public static void printName(Person p) {
		System.out.println(p.getName());
	}
	
	public static void printName(Car c) {
		System.out.println(c.getName());
	}
	
	private static class Person {
		private String name;

		public Person(String name) {
			this.name = name;
		}
		
		public String getName() {
			return name;
		}
	}
	
	private static class Car {
		private String name;
		
		public Car(String name) {
			this.name = name;
		}
		
		public String getName() {
			return name;
		}
	}
}

Mit Interface:
Java:
public class InterfaceExample {

	public static void main(String[] args) {
		Person p1 = new Person("Hans");
		Person p2 = new Person("Peter");
		Car c = new Car("Audi");
		
		printName(p1);
		printName(p2);
		printName(c);
	}
	
	public static void printName(Named n) {
		System.out.println(n.getName());
	}
	
	private static class Person implements Named {
		private String name;

		public Person(String name) {
			this.name = name;
		}
		
		public String getName() {
			return name;
		}
	}
	
	private static class Car implements Named {
		private String name;
		
		public Car(String name) {
			this.name = name;
		}
		
		public String getName() {
			return name;
		}
	}
	
	private static interface Named {
		public String getName();
	}
}
Es wird nur noch eine Methode printName gebraucht.
 
B

bygones

Gast
wie definierst du Mehrfachvererbung/ Vererbungshierarchie?
durch die Java-Einschränkungen gibt es da eine gewisse Eingrenzung, als Polymorphie allgemein betrachtet stehen die implementierenden Klassen ja nun doch in irgendeiner Hierarchie zusammen, das ist ja gerade das Ziel
weil String und Integer Comparable sind, stehen die beiden nicht im direkten Zusammenhang und somit nicht in einer Vererbungshierarchie. Number und Integer hingegen schon.

Ueber ein Interface koennen voellig verschiedene Domains verbunden werden, die logisch nix miteinander zu tun haben, daher sehe ich das nicht als Vererbung an. Vererbung bindet Klassen zusammen und sollte nur eben bei zusammengehoerigen Elementen genutzt werden.

Natuerlich stehen bei einem gemeinsamen Interface die Klassen in eine Hierarchie, aber ich finde eben Vererbung ist ein anderes Konzept und sollte auch anders behandelt werden. Wahrscheinlich eine Kleinigkeit
 

unknown

Bekanntes Mitglied
hey ich hätte eine Frage, wenn man beispielsweise geometrische Figuren hat und dabei gerne das Interface verwenden möchte, dann gibt es bei den Figuren Methode, die immer das gleiche tun.

[Java] getX();
getY();
getMaxX();
getMaxY();
[/code]

gibt es da eine Möglichkeit ein Interface zu verwenden, ohne dass man Methoden, die Bereits von Java zugeliefert werden, nochmals definieren muss?
 
I

irgendjemand

Gast
wenn du das ganze mit interfaces machen willst dann musst du in jeder klasse die dies implementieren soll die entsprechende methode aus-implemenieren ...
das was du sicher meinst ist von basis-klassen der SE-api ableiten und dann deren methoden verwenden ...
das nennt sich dann vererbung und hat so nichts mit interfaces zu tun ..

auch dazu findest du in der java-insel genug material
 
B

bygones

Gast
wenn du das ganze mit interfaces machen willst dann musst du in jeder klasse die dies implementieren soll die entsprechende methode aus-implemenieren ...
das was du sicher meinst ist von basis-klassen der SE-api ableiten und dann deren methoden verwenden ...
das nennt sich dann vererbung und hat so nichts mit interfaces zu tun ..

auch dazu findest du in der java-insel genug material
ich glaube eher er meint, ob es in JAva schon ein solches Interface gibt, so dass er bei "Figuren" Interfaces nicht nochmal all diese Methoden definieren muss, sondern einfach ueber [c]interface Figur extends JavaInterfaceFigur[/c] das ganze regelt.

AFAIK gibt es kein Java Interface aber das solche methoden definiert
 

parabool

Bekanntes Mitglied
Ich denke, er meint eine Abstrakte Klasse in welcher die Methoden (getX..), die in allen geom. Fig. gleich sind, implementiert sind und die speziellen abstract.

Java:
public abstract class GeometrischeFigur
{
	int x;	
	public int getX()
	{
		return x;
	}	
	// Berechnung ist bei (fast) jeder Figur anders
	public abstract int getUmfang();	
}

Edit: besseres Beispiel: Berechnung der Fläche.
 
Zuletzt bearbeitet:

unknown

Bekanntes Mitglied
Ich denke, er meint eine Abstrakte Klasse in welcher die Methoden (getX..), die in allen geom. Fig. gleich sind, implementiert sind und die speziellen abstract.

Java:
public abstract class GeometrischeFigur
{
	int x;	
	public int getX()
	{
		return x;
	}	
	// Berechnung ist bei (fast) jeder Figur anders
	public abstract int getUmfang();	
}

Edit: besseres Beispiel: Berechnung der Fläche.

Aber dann reden wir da von der Vererbung und nicht mehr vom Interface, oder?
 

parabool

Bekanntes Mitglied
Ja , schon. Die abstrakte Klasse gibt der erbenden Klasse aber auch ein Interface, also zu implementierende öffentliche Methoden, vor.

Nicht mehr zu differenzierende Methoden (public und protected) können hier schon ausimplementiert werden.
 
B

bygones

Gast
Der Vorteil beim Verwenden des Interfaces ist es aber, dass du die Implementierung austauschen kannst ohne den Rest vom Code (welcher sich nur auf das Interface bezieht) verändern zu müssen.
da Interfaces nix anderes als (besondere) abstrakte Klassen sind, gilt das natuerlich auch bei abstrakten Klassen....
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Verwendung jna Java Basics - Anfänger-Themen 15
L Zufälligen Zahlencode, ohne mehrfacher Verwendung einer Ziffer Java Basics - Anfänger-Themen 15
Kirby.exe Frage zur Verwendung von Interfaces Java Basics - Anfänger-Themen 6
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
S Try-Catch in Verwendung einer while Schleife Java Basics - Anfänger-Themen 2
A OOP Richtige Verwendung von ArrayList und equals Java Basics - Anfänger-Themen 24
kilopack15 Verständnisfrage zur Verwendung von notify() bei Threads Java Basics - Anfänger-Themen 2
b1ck Scanner schließen, erneute Verwendung Java Basics - Anfänger-Themen 12
H Datentypen Fehler bei Verwendung von enum Java Basics - Anfänger-Themen 9
A Verwendung von Interfaces Java Basics - Anfänger-Themen 7
G Variablen Verwendung von Variablen in anderer Klasse Java Basics - Anfänger-Themen 6
G Verwendung von Konstruktor Java Basics - Anfänger-Themen 8
M Verwendung von System.exit(0) problematisch? Java Basics - Anfänger-Themen 1
D native Methoden, Verwendung? Java Basics - Anfänger-Themen 8
fLooojava kleines Projekt - Verwendung von Youtube Java Basics - Anfänger-Themen 22
X Array Ausgabe bei Verwendung von 2 Schleifen erklären Java Basics - Anfänger-Themen 8
G verwendung von regex Java Basics - Anfänger-Themen 3
K Problem bei der Verwendung von Gregorian Calender Java Basics - Anfänger-Themen 3
T NullPointerException bei Verwendung einer Klasse einer anderen .jar datei Java Basics - Anfänger-Themen 3
B Wie wichtig ist Verwendung von StringBuffer in Schleifen? Java Basics - Anfänger-Themen 10
B Verwendung von Arrays Java Basics - Anfänger-Themen 2
A Methoden Verwendung von crypt? Java Basics - Anfänger-Themen 2
D Muss ich eigentlich immer auf die Verwendung des richtigen Datentyps achten? Java Basics - Anfänger-Themen 7
D reg Exp, verwendung des endezeichen "$" Java Basics - Anfänger-Themen 5
C Verwendung von Schleifen? Java Basics - Anfänger-Themen 18
J Datentypen Array - Verwendung im Konstruktor Java Basics - Anfänger-Themen 8
C Verwendung von primitiven Datentypen Java Basics - Anfänger-Themen 8
J Problem mit NullPointerException bei Verwendung eines Arrays Java Basics - Anfänger-Themen 6
D Frage zur Verwendung einer Schnittstelle Java Basics - Anfänger-Themen 4
A Verwendung von abstrakten Klassen Java Basics - Anfänger-Themen 17
D Verwendung der Klasse Map Java Basics - Anfänger-Themen 9
C Verwendung von Matrizen in einer Schleife Java Basics - Anfänger-Themen 5
F Umlaute eines Strings entfernen (Verwendung von this?) Java Basics - Anfänger-Themen 2
Daniel_L Verwendung von try und catch bei exceptions Java Basics - Anfänger-Themen 7
I Verwendung von Constant Field Values Java Basics - Anfänger-Themen 4
J Verwendung von eigenen Klassen in JSP Java Basics - Anfänger-Themen 2
G try. catch Verwendung Java Basics - Anfänger-Themen 11
Z Beispiel Würfelspiel mit Verwendung von Feldern Java Basics - Anfänger-Themen 7
H Verwendung lokaler Einstellungen Java Basics - Anfänger-Themen 4
G getName, substring Verwendung Java Basics - Anfänger-Themen 3
I Fehler bei Verwendung von substring Java Basics - Anfänger-Themen 4
S Verwendung von Super Java Basics - Anfänger-Themen 7
M Verwendung von Robot... wie? Java Basics - Anfänger-Themen 6
M Verwendung von "this" Java Basics - Anfänger-Themen 2
U Liste importieren und für weitere Verwendung sichern Java Basics - Anfänger-Themen 4
feuervogel Integral unter Verwendung der Java-Bibliothek berechnen Java Basics - Anfänger-Themen 10
frau-u Probleme mit richtiger Verwendung von FileInputStream Java Basics - Anfänger-Themen 2
S valueOf() vs. toString() Verwendung??? Java Basics - Anfänger-Themen 13
A Kurze Frage zur Verwendung von this Java Basics - Anfänger-Themen 9
S Verwendung bitweiser Operatoren Java Basics - Anfänger-Themen 6
F Verwendung von this in statischen Kontext nicht möglich Java Basics - Anfänger-Themen 8
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

Ähnliche Java Themen

Neue Themen


Oben