Interface als Datentypen

Barney90

Grünschnabel
Hallo,

Ich habe eine Frage bezüglich Interfaces als Datentypen. Ich habe folgenden Code erzeugt.

Code:
public class Klasse implements SuperIface {
   
   public void scanne(int i){
     
     int a = i;
     
   };
   
   public void drucke(){
     
    System.out.println("hallo");
   }
   
   public static void main(String[] args) {
      
     SuperIface kl = new Klasse();
     kl.drucke();
    
   }
}

Code:
public interface SuperIface extends SuperIfaceB {
   
public void drucke();
}

Code:
public interface SuperIfaceB {

   public void scanne(int i);
}

Jetzt meine Fragen:

1. Wozu bildet man Datentypen eines Interface um deren metoden zu benutzen obwohl man das auch mit dem Datentyp der Klasse auf die methode zugreifen kann in unserem Beispiel:

Code:
Klasse kl = new Klasse();
kl.drucke();

2. Warum muss die Methode drucke den Rückgabewert SuperInterface haben wenn ich folgenden Code schreibe:
Code:
Superinterface kl = new Klasse().drucke();

3. Was ist der Unterschied zu 2 wenn ich das so schreibe
Code:
Superinterface kl = (new Klasse()).drucke();

Danke für die Antworten.

Barney90
 

sheel

I love Asm
Hi

1:
In den Beispiel gibts nicht wirklich einen Sinn, stimmt.

Aber wenn du zB. eine Methode funk hast, die ein Objekt als Parameter bekommt, und es soll egal sein
von welcher klasse dieses Objekt ist, solange man drucke() aufrufen kann (weil funk drucke() verwendet) ...

Genau: Ein Interface machen, das ein drucke() hat, und als Parametertyp das Interface angeben. Dann
kann man alles Mögliche übergeben, solange es ein drucke() hat (und das durch einbinden vom Interface
in die eigene Klasse "bestätigt")

2:
Warum? Warum nicht?
Du machst ein neues Objekt der Klasse "Klasse", von diesem Objekt rufst du drucke() auf, und das was
drucke() zurückgibt weist du der Variable kl zu (und was in kl ist muss ein Superinterface sein, offensichtlich).

Ein Objekt von Superinterface allein muss es übrigens nicht sein kann es gar nicht sein (von Interfaces
allein kann man keine Objekte anlegen), sondern es ist ein Objekt irgendeiner Klasse, die Superinterface einbindet.

3:
Kein Unterschied.