# Interface in Methode übergeben?



## downset04 (15. Mai 2008)

Hallo

Hab letztes bei einer Methode gesehen dass man auch Interfaces übergeben kann, bislang war mir nur bekannt dass Klassend die Interfaces implementieren können.

Aber was kann man zb mit 
	
	
	



```
public methode(Ifoo){}
```
 machen wenn Ifoo ein Interface ist? ist das wie eine Klasse? und kann das wie eine Variable behandelt werden? bei der einen Klasse war das interface als Variable deklariert?

thx


----------



## Matty_DE (15. Mai 2008)

also ich glaub du könntest ein Objekt vom Typ des Interfaces übergeben.. aber doch nicht das Interface selbst... 

public metohode(IFoo myObject){}

müsste gehen.. da kannste dann halt alles übergeben was "IFoo" implementiert.. Hi, Polymorphie!


----------



## downset04 (15. Mai 2008)

also die klasse schaut so aus was kann man mit der machen?


```
public class foo {

  private Interfacefoo desc;
  private String re;  
  private String pu;

  public AuthTokenRequest( final Interfacefoo des,
                           final String req,
                           final String pur ) {
    this.desc = des;
    this.re = req;
    this.pu = pur;
  }
```


----------



## zeja (15. Mai 2008)

Interfaces sind Schnittstellen die vorgeben was für Methoden von Klassen implementiert werden müßen.

Ein Beispiel:

```
package de.tutorials;

public class InterfaceDemo {

	public interface Driveable {

		public String getName();

		public int getNumberOfWheels();

	}

	public static class Car implements Driveable {

		@Override
		public String getName() {
			return "Car";
		}

		@Override
		public int getNumberOfWheels() {
			return 4;
		}

	}

	public static class Bicycle implements Driveable {

		@Override
		public String getName() {
			return "Bicycle";
		}

		@Override
		public int getNumberOfWheels() {
			return 2;
		}

	}

	public static void driveFromAToB(Driveable with, String whom, String from,
			String to) {
		System.out.println(whom + " drives by " + with.getName() + " from "
				+ from + " to " + to + ".");
	}

	public static void main(String[] args) {
		driveFromAToB(new Car(), "Me", "here", "there");
		driveFromAToB(new Bicycle(), "You", "there", "here");
	}

}
```

Car und Bicycle implementieren beide die Schnittstelle Driveable und damit die Methoden getName und getNumberOfWheels. Diese Methoden können damit über die Schnittstelle angesprochen werden. Dies passiert in der Methode driveFromAToB die ein konkretes Objekt with übergeben bekommt dessen Klasse Driveable implementiert.


----------



## downset04 (16. Mai 2008)

```
Driveable b = new Car();
        if(b instanceof Car){
            System.out.print("It's a car");
        }
```

sowas t auch für was braucht man das ?


----------



## zeja (16. Mai 2008)

Irgendwie ist das unvollständig.


----------



## downset04 (16. Mai 2008)

halt da hinein

```
public static void main(String[] args) {
Driveable b = new Car();
     if(b instanceof Car){
         System.out.print("It's a car");
     }
        driveFromAToB(new Car(), "Me", "here", "there");
        driveFromAToB(new Bicycle(), "You", "there", "here");
    }
```


----------



## zeja (16. Mai 2008)

Was ist deine Frage? Der Satz war unvollständig.


----------



## downset04 (16. Mai 2008)

Driveable ist ein Interface und so behandle ich es wie eine Klasse oder?


----------



## zeja (16. Mai 2008)

Öhm b ist eine Variable vom Typ Driveable und erlaubt damit den Aufruf aller Methoden die dort definiert sind.

Ob Driveable nun eine Klasse oder ein Interface ist ist egal sobald du einmal ein Objekt davon hast. Interfaces lassen sich nur nicht instanziieren, das geht nur mit Klassen.

instanceof sollte man übrigens nur sehr sparsam einsetzen und ist bei ordentlichem Design nicht von Nöten.


----------

