interface

Pahiti78

Mitglied
Hallo Zusammen,
ich habe ein Interface "Haustier" erstellt und möchte es in der Klasse "HaustierTestlauf" laufen lassen.
Es haut nicht hin. Ich würde gerne wissen wieso. Ich würde weiterhin gern wissen, welche Vorteile ein Interface bietet. Irgendwie wird mir das nicht deutlich. Ich hatte bisher abstrakte Klassen erstellt, die eigentlich das gleiche könnten. Bitte könnte mich jemand aufklären, Dankschön

Java:
public interface Haustier {
abstract void bellen();
}

So und jetzt die Klasse Hund, welche importiert.

Java:
public class Hund implements Haustier {
Hund n=new Hund();

@Override
public void bellen() {
	// TODO Auto-generated method stub
	System.out.println("Belle wie Hund");
}

}

Und die testlaufklasse.
Java:
public class TestlaufHaustier {
public static void main (String args[]){
	Hund n= new Hund();
	n.bellen();
	
}
}
 

kaoZ

Top Contributor
Es haut nicht hin

Das ist keine Fehlerbeschreibung, was genau geht nicht ? wo wird ein Fehler erzeugt ?


1. man muss Methoden in Interfaces nicht zusätzlich als abstrakt kennzeichnen
2. Ein Interface ermöglicht dir mehrere Dinge, je nach dessen Einsatzgebiet

-als Markerinterface um bestimmte Klassen für bestimmte Aktionen zu markieren
-als Schnittstelle zwischen verschiedenen Klassen um auf Abstraktionsebene zu bleiben
-um Klassen gewisse "Rollen" / "Kategorien" zuzuweisen

In deinem Fall wäre nun folgendes der Fall :

Interface :

Java:
public interface Haustier {
	
	void bellen();

}

Klasse Hund:

Java:
public class Hund implements Haustier {

	@Override
	public void bellen() {
		System.out.println("Wau Wau");
		
	}

}

Katze :

Java:
public class Katze implements Haustier{

	@Override
	public void bellen() {
		System.out.println("Miau");
	}

}

Test :

Java:
public class Haustiertest {
	
	public static void main(String[] args) {
		Haustier h = new Hund();
		h.bellen();
		
		Hund h1 = new Hund();
		h.bellen();
		
		Haustier k = new Katze();
		k.bellen();
	}

}

Ausgabe :

Wau Wau 
Wau Wau
Miau

Du könntest wie auch bei Abstrakten Basisklassen Das Interface überall einsetzen wo ein Spezialisiertes Haustier erwartet werden würde, heißt du bewegst dich auf einer Abstrakteren Ebene als wenn du Spezielle Haustiere verwenden würdest.

Zusätzlich dazu ist wie du weißt Mehrfachvererbung in Java nicht möglich , hierzu hat man sich entschlossen Interfaces einzuführen um z.B Klassen welche gleiche Eigenschaften / Rollen besitzen sollen und ja nicht von Mehreren Basisklassen abgeleitet werden können , aber die Möglichkeit zu bieten mehrere Interfaces zu implementieren und somit die Funktionalität zu bieten.

Stell dir vor du hast folgende Situation :

Ein Array aus Haustieren, und du möchtest für jedes Haustier in diesem Array bellen(); aufrufen, wie du siehst verwende ich hier nur den das Interface um eine Spezialisierung zu instanzieren, trotzdem weiß der Kompiler auf welcher Spezialisierung ich bellen aufrufen möchte, einzig und allein wenn du nun in den einzelnen Klassen spezielle Methode hast welche es in dem Interface nicht gibt, müsstest du einen Downcast auf eine Spezielle Klasse druchführen.

[EDIT]Zum anderen ist es so , wenn du dich vielleicht später entschließen solltest noch eine weitere Klasse zu erstellen z.B die ebenfalls bellen kann, du aber deine Methode die das bellen aufruft auf eine bestimmte speziallisierung augelegt hast, müsstest du dieses dann wieder umschreiben, das kann dir bei nutzung auf einer höheren Abstrakteren Ebene nicht passieren , in der hier im Beispiel verwendeten For/each Schleife ist es egal ob es sich um ein Hund oder eine Katze handelt, wichtig ist nur das die Klassen durch die Implementierung sich dem Kompiler als Haustier "zu erkennen geben".[/EDIT]

Nimm mal an Hund hätte eine Methode rummrennen , die auch nur in dieser Klasse existiert, dann kannst du diese nicht aufrufen wenn du wie ich unten nur als Interface instanzierst, da es diese Methode dort nicht gibt:

Java:
public void rumrennen(){
	System.out.println("rennt wie ein Wahnsinniger !");
}

Java:
public class Haustiertest {
	
	public static void main(String[] args) {
		
		Haustier h	 = new Hund();
		Haustier k	 = new Katze();
		
		Hund h1		 = new Hund();
		Katze k1	 = new Katze();

		Haustier[] haustiere = {h,h1,k,k1};
		
		for (Haustier haustier : haustiere) {
			haustier.bellen();
		}
		
                h.rumrennen(); // das lässt der Kompiler nicht zu da rumrennen im Interface nicht existiert.

		((Hund)h).rumrennen();  // Downcast auf Hund, da rumrennen in Haustier nicht existiert.
	}

}

Ausgabe :

Wau Wau
Wau Wau
Miau
Miau
rennt wie ein Wahnsinniger!

Nochmal grundlegendes zur Verwendung

Interfaces schließen quasi einen Kontrakt zwischen Interface und implementierender Klasse, anders als bei Abstrakten Klassen in welchen du schon Methoden implementieren kannst (auch leere = Hook)um eine gewisse Basisfunktionalität zu gewährleisten , sind in Interfaces alle Methoden automatisch abstrakt, zudem bedeutet das das alle Klassen die das Interface implementieren alle dort angebotenen Methoden zur Verfügung stellen müssen!
ähnlich einem Vertrag muss also der Vertragspartner sämtliche Anforderungen erfüllen.

Anderes Beispiel :

Wenn du nun also garantieren möchtest das z.B die Klasse Auto und deren Spezialisierungen später fahren können, kannst du dies über das implementieren eines "Fahrbar" interfaces machen.

Java:
public abstract class Auto implements Driveable{

   @Override
   public void drive(){
      
   }
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
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
F eigenes Listener Pattern mit Interface Java Basics - Anfänger-Themen 1
M Interface als Datentyp Java Basics - Anfänger-Themen 12
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