Was ist ein Interface?

G

guest12

Gast
Hallo Leute!

Ja, ich hab gegoogelt und hab folgende Beschreibung gefunden:
http://www.java-forum.org/einfuehrungen-erste-schritte/117297-interfaces.html

Das Programm ohne Interface ist mir vollkommen klar, aber das mit dem Interface verwirrt mich ein wenig.

Das Interface-Programm ist ja folgendermaßen aufgebaut:
Java:
interface Buyable() {
    public int getPrice();
}
 
class Car implements Buyable{
 
    @Override
    public int getPrice() {
        return 15000;
    }
}
 
class Truck implements Buyable{
 
    @Override
    public int getPrice() {
        return 45000;
    }
}
 
class Motorbike implements Buyable{
 
    @Override
    public int getPrice() {
        return 8000;
    }
}
 
class CarDealer {
 
    private int billingAmount;
 
    public void buyBuyable(Buyable b) { //an der stelle: "Buyable b" ="new Car()", also die Adressen sind von beiden dieselbe, oder? Wenn nicht wie nennt man das sonst? Ich begreif jetzt nicht wie jetzt "b.getPrice" die Auto-Klasse finden soll und halt dann darin die Funktion getPrice aufruft.
        billingAmount += b.getPrice();
    }
    
    public void printBill() {
        System.out.println("Der Betrag Ihres Einkaufs beläuft sich auf:");
        System.out.println(billingAmount + " €.");
        System.out.println("Danke für Ihren Einkauf bei MegaMüll Vehicles.");
    }
}

Bitte versucht es das mir zu erklären. Bzw. warum muss man den "Buyable b"(das interface) mit "new Car" gleichstellen? Also übergeben(=gleichstellen). Also was passiert da genau?


Danke!

mfg

guest
 
F

Firephoenix

Gast
Du hast einen Parkplatz auf den du ein Auto abstellen kannst:

Java:
Auto parkplatz;

Auto ist dein Interface, welches die Methode fahren() anbietet.

Jetzt kannst du auf den Parkplatz einen BMW stellen:

Java:
parkplatz = new BMW();

oder einen Audi:

Java:
parkplatz = new Audi();

Aber egal welches Auto du auf den Parkplatz stellst, du kannst es dir nehmen und damit herumfahren:

Java:
parkplatz.fahren();

Sieht geschrieben zwar komisch aus, aber parkplatz ist ja nur der Variablenname für ein Auto, also "reservierter Speicher". Mit dem Punkt-Operator kommst du an die Schnittstellen des Autos auf dem Parkplatz (oder an eine NullpointerException falls du kein Auto geparkt hast), und kannst damit fahren.

Interfaces sind also abstrakte Definitionen für Schnittstellen die ein Objekt anbietet.
Du kannst aber keine direkte Instanz erstellen (new Auto() macht keinen Sinn, es muss ja irgend ein bestimmtes Auto sein).

Ich hoffe die Erklärung ist verständlich ;)

Gruß
 
T

Tomate_Salat

Gast
Die Erklärung find ich nicht gut. Du hättest einfach bei Auto bleiben sollen:

Ein VW-Käfer ist immer ein Auto aber ein Auto nicht immer ein VW-Käfer. Jedes Auto kann fahren. Jeder Mensch mit einem Führerschein kann (theoretisch) jedes Auto fahren. Angenommen du hast die Klasse Mensch und willst, dass dieser ein Auto fährt, dann könnte deine Methode so ausschauen:

Java:
public void driveCar(VWKaefer vwkaefer)
{
     vwkaefer.drive();
}

public void driveCar(MercedesAKlasse aKlasse)
{
     aklasse.drive();
}

die Liste kann man jetzt endlos fortsetzen. Hier kommen Interfaces ins Spiel: Den Menschen interessiert es hier nur, dass man das Auto fahren kann. Es reicht also vollkommen aus, dass das übergebene Objekt die Methode [c]drive()[/c] kennt und definiert hat. Somit können wir unsere x-Methoden zu einer zusammenfassen:

Java:
public void driveCar(Car car)
{
    car.drive();
}
 
H

hüteüberhüte

Gast
Java:
interface Buyable {

    public int getPrice();
}

class Car implements Buyable {

    @Override
    public int getPrice() {
        return 15000;
    }
}

class Truck implements Buyable {

    @Override
    public int getPrice() {
        return 45000;
    }
}

class Motorbike implements Buyable {

    @Override
    public int getPrice() {
        return 8000;
    }
}

class CarDealer {

    public static void main(String[] args) {
        int billingAmount = 0;
        Buyable[] buyables = {new Car(), new Truck(), new Motorbike()};
        for (int i = 0; i < Math.random() * 100; i++) {
            // wie lang läuft diese Schleife durchschnittlich ;)
            int r = (int) (Math.random() * buyables.length);
            billingAmount += buyables[r].getPrice();
            System.out.println(buyables[r] + " gekauft");
        }
        System.out.println("Der Betrag Ihres Einkaufs beläuft sich auf: " + billingAmount);
    }
}
 
G

guest12

Gast
Danke leute, aber folgendes verstehe ich noch nicht:

In einer anderen Klasse rufe ich jetzt: carDealer.buyBuyable(new Car()); auf.

In wieder einer anderen Klasse ist folgende Methode:
Java:
 public void buyBuyable(Buyable b) { 
        billingAmount += b.getPrice();
    }

Bei dem Übergabeparameter geschieht im Prinzip folgendes:

Buyable b = new Car(); <-- Was passiert da genau?

Und wenn ich jetzt mace b.getPrice();, wie weiß der Compiler(oder der PC, wie auch immer das heißt) das er jetzt in die Klasse Car gehn muss und nicht in Truck oder sonst was?

Normalerweise macht man ja: JButton button = new JButton();
--> Also: Klasse name = new Klasse()

Oben hingegen macht man:
Interface name = new Klasse()

Und naja was passiert jetzt genau da?
 

Pentalon

Bekanntes Mitglied
Java:
interface Buyable {

    public int getPrice();
}

class Car implements Buyable {

    @Override
    public int getPrice() {
        return 15000;
    }
}

class Truck implements Buyable {

    @Override
    public int getPrice() {
        return 45000;
    }
}

class Motorbike implements Buyable {

    @Override
    public int getPrice() {
        return 8000;
    }
}

class CarDealer {

    public static void main(String[] args) {
        int billingAmount = 0;
        Buyable[] buyables = {new Car(), new Truck(), new Motorbike()};
        for (int i = 0; i < Math.random() * 100; i++) {
            // wie lang läuft diese Schleife durchschnittlich ;)
            int r = (int) (Math.random() * buyables.length);
            billingAmount += buyables[r].getPrice();
            System.out.println(buyables[r] + " gekauft");
        }
        System.out.println("Der Betrag Ihres Einkaufs beläuft sich auf: " + billingAmount);
    }
}

Danke. Das ist ein wirklich tolles Beispiel.

Pentalon
 
G

guest12

Gast
1. was wollte hüteüberhüte damit andeuten mit seinem Programm mit der for etc.? Hat das was mit meiner Frage zu tun?

2. Bitte helft mir ich möchte das gerne verstehn, aber ich habs noch nicht so richtig verstanden, darum bitte Fragen meines letzen Beitrags bitte beantworten.

Danke :)
 
M

Marcinek

Gast
Hallo,

das ist nur eine Art Sicht auf das Objekt.

Das Objekt ist immer eins von Audi, BMW, etc.

Innerhalb der Vererbungshierarchie kann man immer hoch und runter casten.

Hier passiert nix anderes.

Man kann auch schreiben.

Object o = new JButton();

oder Component c = new JButton.
 

langhaar!

Bekanntes Mitglied
Das, womit du Probleme hast, nennt sich Polymorphie.
Man reduziert den verwendeten Typ auf das, was wirklich gebraucht wird.
Z.B. bei einer List schreibt man oft:

List list = new ArrayList()

Wenn man dann z.B. irgendwann statt ArrayList LinkedList verwenden will, braucht man nur eine Zeile ändern und sich keine Gedanken darüber zu machen, ob eine ArrayList evlt. andere Methoden als eine LinkedList hat.
 

Landei

Top Contributor
Interfaces beleuchten oft nur bestimmte Teilaspekte eines Wertes, und diese müssen auch nicht unbedingt mit der normalen Vererbungshierarchie konform gehen. Typisches Beispiel wäre das Interface [c]Comparable[/c], das von allen möglichen und unmöglichen Klassen implementiert wird, und nur aussagt, dass man zwei Instanzen in irgend einer Weise miteinander vergleichen kann. Einem Sortieralgorithmus ist es völlig egal, ob er da mit Integers, Strings, Datumsen oder Autos hantiert, solange die Instanzen "sortierbar" sind - wofür das Comparable-Interface eine API anbietet. Und weil das so ist, werden die entsprechenden Objekte in der Sortiermethode eben auch als Comparable angesprochen, und nicht als Integer, String, Datum u.s.w. - sie sind das zwar "intern" (also im Speicher steht wirklich ein Integer, String...), aber in diesem Kontext ist es nicht von Belang.
 

Pentalon

Bekanntes Mitglied
Betrachte es als eine GEMEINSAMKEIT die Du durch das Interface unter verschiedensten Klassen schaffen kannst.
Jede Klasse die das Interface implementiert hat diese Gemeinsamkeit zur anderen Klasse, auch wenn der Rest nichts miteinander zu tun hat.
Mit dieser GEMEINSAMKEIT kann man dann arbeiten, indem man in einem Loop z.B. alle getPrice() Methoden (Beispiel von Hüteüberhüte) der verschiedenen Objekte aufruft und aufaddiert. Ein anderes Beispiel wäre in einem Spiel, das seine Objekt auch zyklisch auf dem Bildschirm darstellen muss. Jede dieser Klassen und seiner daraus erstellten Objekte hat irgend ein Interface für die Darstellung.
Alle diese Interfacemethoden werden mit einem Loop durchlaufen um das Objekt an seine neuen Position darzustellen.

Zu Deiner Frage:
Buyable ist die Interfaceklasse.

Java:
Buyable b = new Car(); <-- Was passiert da genau?

Es wird eine Variable b vom Typ der Interfaceklasse Buyable erstellt und das Objekt (bzw. die Adresse des Objektes) von Car() darin gespeichert. Im prinzip nichts anderes als

Java:
String s = "Hallo";

Vielleicht findest Du auch das hilfreich:
http://warhol.wiwi.hu-berlin.de/~berendt/lehre/2001w/ser/slides/Vorlesung13/interface.html

Pentalon
 
H

hüteüberhüte

Gast
1. was wollte hüteüberhüte damit andeuten mit seinem Programm mit der for etc.? Hat das was mit meiner Frage zu tun?

2. Bitte helft mir ich möchte das gerne verstehn, aber ich habs noch nicht so richtig verstanden, darum bitte Fragen meines letzen Beitrags bitte beantworten.

Danke :)

1.: Nicht wirklich, es sollte nur ein Beispiel sein, in dem zufällig oft Autos usw. gekauft werden, und das andeutet, wofür Interfaces nützlich sind.

2.: Gutes Buch? Oder wurde schon empfohlen? :D
 
Ä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
P interface 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

Ähnliche Java Themen

Neue Themen


Oben