# Ein interface und private Methoden?



## frager (20. Dez 2006)

hallo, warum kann ich denn in einem interface keine privaten methoden anlegen? ich moechte spaeter in der klasse, die das implementiert nur eine public methode haben. verseth ich was falsch?

gruesse und vielen dank


----------



## FelixB (20. Dez 2006)

Ein Interface ist dazu gedacht, eine Schnittstelle zu spezifizieren.

Der Programmierer von Klasse A weiß dann genau, dass Klasse B genau die Methoden m1, m2 und m3 besitzt und wie diese aufzurufen sind, wenn diese Klasse B das interface I implementiert.

"private" Methoden sind nur intern für die jeweilige Klasse relevant, nicht jedoch für andere Klassen. Insofern ist es sinnlos, "private" Methoden in einem Interface zu deklarieren.

das gewünschte Verhalten lässt sich erzwingen, indem du kein Interface, sondern eine abstrakte Klasse erstellst. Ob das sinnvol ist, steht auf einem anderen Blatt...

bye
Felix


----------



## EOB (20. Dez 2006)

aber es koennte ja jemand eine methode aufrufen, die zu einem bestimmten zeitpunkt nicht aufgerufen werden darf?
gruesse


----------



## Waldbeere (20. Dez 2006)

Hi,

für sowas schreibt man dann wieder rum andere Methoden mit denen sich überprüfen
lässt ob man eine andere Methode aufrufen sollte. Es gibt da z.B den wunderschönen
Iterator. Mit diesem kann man z.B sich mit der Methode next() immer das nächste Element
in der Liste geben lassen. Blöd ist sowas natürlich, wenn die Liste schon leer ist und man
weiter next() fragt. Aus diesem Grund gibt es die Methode hasNext(), und
schreibt das dann so, und hat keine Sorgen:


```
List<String> namen = new LinkedList<String>();

namen.add("Hans");
namen.add("Klaus");
namen.add("Fritz");

Iterator<String> theIterator = namen.iterator();

while (theIterator.hasNext()) {
    System.out.println(theIterator.next());
}
```

Wenn Du ohne hasNext() arbeitest und mehr aus der Liste rausholen willst als drin ist kriegst Du eine
NoSuchElementException.

Gruß Waldbeere


----------



## SlaterB (20. Dez 2006)

was hat der Iterator mit diesem Thread zu tun?


----------



## Campino (20. Dez 2006)

SlaterB: Der Iterator war ein beispiel....

Ansonsten: soweit ich weiß kann man in einem Interface protected-Methoden anlegen. darüber wie sinnvoll das ist, kann man sich allerdings tatsächlich streiten...


----------



## Ark (21. Dez 2006)

protected? Hm, das möchte ich mal anzweifeln. Mit einem "implements Interface" garantierst Du ja Methoden, die von überall dort aus erreichbar sind, wo das Interface selbst erreicht werden kann. … Oder etwa nicht? ???:L


----------



## Jango (21. Dez 2006)

Ark hat gesagt.:
			
		

> protected? Hm, das möchte ich mal anzweifeln. Mit einem "implements Interface" garantierst Du ja Methoden, die von überall dort aus erreichbar sind, wo das Interface selbst erreicht werden kann. … Oder etwa nicht? ???:L



...und das wäre bei protected Methoden nur im eignen package so.


----------



## Ark (21. Dez 2006)

So weit ich weiß, sind als protected Deklarierte auch außerhalb des definierenden Pakets erreichbar. Was aber eventuell ginge, wären package-private Interfaces mit ebenso erreichbaren Methoden. Ich bin mir aber nicht sicher.


----------



## Wildcard (21. Dez 2006)

geht nicht, gibt's nicht.


----------



## Guest (21. Dez 2006)

Ark hat gesagt.:
			
		

> So weit ich weiß, sind als protected Deklarierte auch außerhalb des definierenden Pakets erreichbar. Was aber eventuell ginge, wären package-private Interfaces mit ebenso erreichbaren Methoden. Ich bin mir aber nicht sicher.





> protected
> 
> Methoden oder Variablen vom Typ protected sind in der aktuellen Klasse und in abgeleiteten Klassen sichtbar. Darüber hinaus sind sie für Methoden anderer Klassen innerhalb desselben Pakets sichtbar. Sie sind jedoch nicht für Aufrufer der Klasse sichtbar, die in anderen Paketen definiert wurden.


 Quelle: www.javabuch.de

Ich denke mal, dass das für Schnittstellen genauso gilt, oder? :wink:


----------



## Jango (21. Dez 2006)

sorry - war nicht eingeloggt


----------



## Tobias (21. Dez 2006)

Ein Interface ist eine abstrakte Klasse, dir nur public abstract Methoden zuläßt. Nichts mit private oder protected. Welchen Sinn hätte das denn auch?

mpG
Tobias


----------



## Leroy42 (22. Dez 2006)

frager hat gesagt.:
			
		

> ich moechte spaeter in der klasse, die das implementiert nur eine public methode haben.



Dann lass doch einfach nicht deine Klasse selbst,
sondern eine Innere Klasse von ihr (static oder nicht
hängt von deinen Bedürfnissen ab) das Interface implementieren.


----------

