# Unterschied zwischen Interface und Vererbung und Sinn?



## p-flash (8. Feb 2005)

Hi,

meine erste Frage ist, ich habe folgende interface-Klasse:

```
public interface VersicherungI
{
     public double berechnePraemie(double Versicherungssumme);
}
```

Was für einen Sinn hat das? Da ist ja kein Rumpf definiert?

2. Frage wäre, was der Unterschied zu Vererbung genau ist.

Danke schonmal.

p-flash


----------



## bygones (8. Feb 2005)

Interfaces definieren Schnittstellen für Klassen. D.h. sie implementieren logischerweise keine Methoden, da sie nur den Klassen, die sie implementieren vorgeben, welche Signatur der Methode sie implementieren müssen.

Wie die Klasse sonst aufgebaut ist und wie genau die interface methoden implementiert werden ist für das Verwenden des Interfaces irrelevant.

Bsp: du willst Objekte einer Klasse sortiert haben. D.h. deine Objekte müssen vergleichbar sein. Also lässt du deine Klasse das Interface Comparable implementieren, das die Methode compareTo besitzt, dass dir angibt ob eine Objekt größer, kleiner oder gleich eines anderen Objektes der Klasse ist.

Dem Sortierungsalgorithmus nun ist es ziemlich schnuppe ob er Objekte der Klasse X oder Y oder Z sortiert, solange sie alle das Comparable implementieren, weil dann kann er die Methode compareTo aufrufen und weiß die Ordnung der Objekte (unabhängig von der Implementierung.)

Vererbung ist wieder etwas ganz anderes. Durch sie kannst du deine Klassen generalisieren bzw. spezialisieren.

Wohingegen eine Klasse nur eine Superklasse haben kann, kann sie mehrere Interfaces implementieren.


PS: Schau dich im Unterforum "Bücher, Links und Tutorials" mal nach Büchern um, da wird das alles schön ausführlich und genauer besprochen !!


----------



## meez (8. Feb 2005)

Zu einem Interface gehört immer auch eine Klasse, die die Funktion dazu bietet...
Angenommen du willst einen anderen Programmierer  die Implementierung der Berechnung einer Praemie überlassen. Dann müsst ihr euch ja irgendwie auf eine Schnittstelle einigen. Dafür sind Interfaces da...

Du gibts ihm also dein Interface, und er implementiert folgende Klasse: 

```
public class VersicherungIImpl implements VersicherungI  {
   public double berechnePraemie(double Versicherungssumme) {
        return irgeneine berechnung 
    }
}
```


Dir kannn dabei egal sein, welche Methoden er benutzt, oder wie er das macht, da du nur über das Interface darauf zugreifst..


```
VersicherungI   vers = new VersicherungIImpl();    
    double resultat  =  vers.berechnePraemie(2.32);
```


Solltest du irgendwann die Implemetierung wechseln wollen (evt. wegen eines Bug) , so musst du nicht dein ganzes Programm umstellen, sondern nur den Klassennamen der neuen Klasse beim erzeugen des Objektes angeben.


----------



## p-flash (8. Feb 2005)

Ui, das war jetzt sehr hilfreich.

Vielen Dank.

p-flash


----------



## Dreezard (9. Feb 2005)

Also ich denke es reicht wenn du solche fragen in ein Forum postest! Du brauchst nicht für eine Frage die Zeit anderer beanspruchen, wenn du die Antwort schon hast.
http://kampet.drunken-seals.de/javaforen/viewtopic.php?t=950


----------



## stev.glasow (9. Feb 2005)

Dreezard hat gesagt.:
			
		

> Also ich denke es reicht wenn du solche fragen in ein Forum postest! Du brauchst nicht für eine Frage die Zeit anderer beanspruchen, wenn du die Antwort schon hast.
> http://kampet.drunken-seals.de/javaforen/viewtopic.php?t=950


Jo, kapier ich auch immer nicht was das soll, aber nagut, oft kommt das ja nicht vor-


----------

