Warum sind Interface-Methoden public?

Status
Nicht offen für weitere Antworten.

-frank

Bekanntes Mitglied
Hallo,
ich würde gerne wissen, warum Inteface Methoden implizit als "public" definiert sind.

Ich habe zb in meinem Programm Objekte, die man an etwas anhängen kann. Das sind aber ganz unterschiedliche Objekte. Ich definiere daher das Interface "Appendable" mit beispielsweise der Methode "getAppendableInfomation()".

das ist für mich der Sinn von Interfaces. ich verstehe aber nicht, warum die Methode "getAppendableInformation()" public sein MUSS. kann ja auch sein, dass ich sie nur in diesem einem package benoetige.

Ein großes Problem ist das natürlich nicht, aber ich würde gerne wissen, was der Sinn dahinter ist. Wollen mir die JavaEnwickler damit sagen, dass Interfaces, die nur lokal benutzt werden, keinen Sinn machen??

danke!
 

thE_29

Top Contributor
Naja, ich finde das "friend" von C++ manchmal um weiten besser als java ;)

Was ist wenn ich eben alles verbieten, aber für die eine Klasse nicht..
 
B

Beni

Gast
Ich habe ein bisschen rumgesucht, im Sun-Forum fand ich z.B. das hier:
From the Java Language Spec, Section 6.6 Access Control:
"The Java programming language provides mechanisms for access control, to prevent the users of a package or class from depending on unnecessary details of the implementation of that package or class."

Access control is all about hiding implementation details. An interface has no implementation to hide.

Das automatische public wurde sogar in die Bug-Database eingetragen, aber jedesmal mit "das ist absichtlich so" geschlossen.

Eine offizielle Erklärung habe ich aber auch nicht gefunden. :cry:
 

thE_29

Top Contributor
Hier gibts viel zum Lesen ;)

http://java.sun.com/docs/books/jls/second_edition/html/interfaces.doc.html

Aber es steht halt immer nur sowas: All members of interfaces are implicitly public.


Hahaha!!!


Wenn man es so schreibt:

Code:
interface Interface1
{
  public void bla()
}

Dann kann man es nur implementieren wenn es auch im gleichen Package ist! Somit kann man sich wenigstens so absichern ;) (wenn man protected oder private schreibt mekkert er)


Wenn man aber public interface schreibt und bei der Methode einfach den public Namen weglässt, macht er es trotzdem public!
 

AlArenal

Top Contributor
Indirekte Antwort:
In Smalltalk ist alles public und damit kann man auch professionell coden (siehe: http://www.cadence.com/ ). Stellt euich also nicht so mimosenhaft an! :D

In der Tat ist es aber schwierig hier per Suchmaschine etwas zu finden, weil die passenden Suchbegriffe millionenfach im Netz zu finden sind, aber eben nicht in solch einer edlen Diskussion.

Vielleicht sollte man sich das mal erbloggen, oder direkt mal einen von Sun nerven. Ich kenne aber nur die Köpfe vom Swing-Team :(
 

thE_29

Top Contributor
Dann Frag die Köpfe vom Swing Team, sie sollen dir die Mail addys von den Konzepttypen schicken :D

Und wenn du es so schreibst

Code:
class InterfaceImpl implements Interface
..

Kann man von außen auch net zugreifen ;) Und somit nicht auf die public Methoden... Ist zwar net der richtig gewünschte Effekt, aber tjo...
 

Leroy42

Top Contributor
AlArenal hat gesagt.:
In Smalltalk ist alles public und damit kann man auch professionell coden

Aber genau diese Eigenschaft von Smalltalk ist es, die es,
meiner Meinung nach, verhindert hat, daß Smalltalk der
Durchbruch im produktiven Bereich nicht gelungen ist. :(
 

Leroy42

Top Contributor
Mist!!!! :x

Das ausgerechnet du mich erwischen könntest,
hätte mir vorher klar sein müssen.

(Ich geh' jetzt freiwillig in die Ecke und schäme mich. :oops: )
 

AlArenal

Top Contributor
Ja, der Teufel ist ein Eichhörnchen...

Ich warte noch auf Reaktionen aus der Blogosphäre auf meine entsprechenden BLog-Einträge. Nötigenfalls würde ich noch einen Hilferuf an die Java-Coder in Second Life schicken. Wenn das alles nichts bringt, sähe ich mich genötigt Meister ihres Faches zu quälen.

Aber vermutlich gibt es eine ganz plausible Erklärung, nur sind wir unwürdig sie zu verstehen...

P.S.:
Ich habe einen buschigen Schwanz...
 
S

stev.glasow

Gast
das ist für mich der Sinn von Interfaces. ich verstehe aber nicht, warum die Methode "getAppendableInformation()" public sein MUSS. kann ja auch sein, dass ich sie nur in diesem einem package benoetige.
Das liegt evtl daran dass höchsten die Einschränkung auf das package Sinn macht - was nicht wirklich wichtig ist, denn das Interface kannst du ja default setzen um so den Zugriff aller Methoden auf das package zu beschränken. Und sehe jetzt nicht so viele Fälle wo es von Nöten ist einige Methoden eines Interfaces öffentlich zugänglich zu machen und einige auf das package zu beschränken.


thE_29 hat gesagt.:
Dann kann man es nur implementieren wenn es auch im gleichen Package ist! Somit kann man sich wenigstens so absichern ;) (wenn man protected oder private schreibt mekkert er)
Und welchen Sinn macht es ne Methode in nem Interface private oder protected zu machen?
Inbesondere ein Anwendungsbeispiel von private und eins wo es Sinn macht den Aufruf einer Interface-Methode auf die Unterklassen zu beschränken würden mich interessieren :bahnhof:

AlArenal hat gesagt.:
P.S.:
Ich habe einen buschigen Schwanz...
öh :lol: Im Second Life hinten oder im First Life vorne?
 

Aske

Mitglied
Für mich liegt der Sinn in einem Interface darin, daß es die Schnittstellen einer Klasse nach außen definiert. Und da macht es doch wenig Sinn, diese Schnittstellen als private zu definieren?!
Es ist doch z.B. so gedacht:

Code:
public Interface IDBZugriff(){
    public connection connect(....);
}

public class DatenbankanwendungMySQL implements IDBZugriff{ 

    public connection connect(){
        ......
        ......
        ......
    }
   
}

public class DatenbankanwendungDB2 implements IDBZugriff{ 

    public connection connect(){
        ......
        ......
        ......
    }
   
}

public class Run(){
    
    // und nun entweder oder:
    IDBZugriff dao = new DatenbankanwendungDB2();
    IDBZugriff dao = new DatenbankanwendungMySQL();
    //die beiden einzigen Zeilen, die sich im Hauptprogramm ändern

    dao.connect();
}

Die Private Methoden würdest Du nun per Hand in die Klassen DatenbankanwendungMySQL oder DB2 implementieren, aber im Interface hätten sie nun nichts zu suchen. Zumindest verstehe ich so den Sinn von Interfaces, aber ich lasse mich gerne belehren ;-).

Gruß, Aske
 

-frank

Bekanntes Mitglied
stevg hat gesagt.:
Das liegt evtl daran dass höchsten die Einschränkung auf das package Sinn macht - was nicht wirklich wichtig ist, denn das Interface kannst du ja default setzen um so den Zugriff aller Methoden auf das package zu beschränken. Und sehe jetzt nicht so viele Fälle wo es von Nöten ist einige Methoden eines Interfaces öffentlich zugänglich zu machen und einige auf das package zu beschränken.

hmm, ich kapiers nicht ganz:
also dass man nur sehr selten einige methoden eines interface gesondert beschränken will, kann ich nachvollziehen. eventuell wäre es dann ohnehin besser, wenn man zwei verschiedene interfaces macht, oder?

aber wenn ich in meinem Beispiel oben getAppendableInformation() nur package-intern benötige, die das Interface implementierende Klasse aber public sein muss, dann sieht man diese Interface-Methoden auch außerhalb.
Man hat zwar keinen Zugriff auf das Interface, wenn dieses default visibility hat, aber sehr wohl auf die das Interface implementierenden Methoden der Klasse, da letzere public sein muss und die Methode eben nicht niedriger als public gesetzt werden kann.
 

Wildcard

Top Contributor
Was ist denn das für ein Blödsinn?
In einem Interface ist alles public (was ja auch Sinn eines Interfaces ist, da es die Schnittstelle nach aussen darstellt).
Lässt man den access modifier weg, sind die Methoden weiterhin public, da das lediglich eine Abkürzung für Schreibfaule ist.
 
S

stev.glasow

Gast
Man hat zwar keinen Zugriff auf das Interface, wenn dieses default visibility hat, aber sehr wohl auf die das Interface implementierenden Methoden der Klasse, da letzere public sein muss und die Methode eben nicht niedriger als public gesetzt werden kann.
Hm, stimmt. Man kann zwar das Interface nicht außerhalb des paketes verwenden aber die implementierten Methoden ... denkfehler drin gehabt.


@Aske: mein reden
 

thE_29

Top Contributor
Genau, wenn man ein Interface ohne irgendwas schreibt, dann kann es von außerhalb net angesprochen werden!

Also so: interface bla{..}

Die Methoden sind aber public ^^

Außerdem hatte ich nie von private Methoden geredet, mir würden schon protected Mehtoden auch reichen!
 

SnooP

Top Contributor
hm... die protected Methoden gehören aber nu mal zu einer Vererbungshierachie und Interfaces sind ja gerade davon entkoppelt... - das einzige was also evtl. Sinn machen könnte, wäre package-private... aber das ist imho sowieso ne blöde Sichtbarkeit ;) - die kann man auch gleich weglassen *g*
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
CptK Generics: Klassen die Interface implementieren, aber selbst nicht das Interface sind Java Basics - Anfänger-Themen 8
K Warum sind Werte in den Feldern ? Java Basics - Anfänger-Themen 2
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
berserkerdq2 Wie würde man einen regulären Ausdruck in Java schreiben, der prüft, dass zwei bestimtme Zahlen nicht nebeneinadner sind? Java Basics - Anfänger-Themen 3
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
X Wie erreiche ich, dass ein Robot weitere Attribute hat, die nicht materialisiert sind, sondern nur über get/ set-Methoden simuliert sind? Java Basics - Anfänger-Themen 1
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
C Sind die while-Schleifen richtig in for-Schleifen ersetzt worden? Java Basics - Anfänger-Themen 8
S Sind unten stehende Anweisungen kompilierbar? Java Basics - Anfänger-Themen 7
M Wie kann ich Werte die in einer While Schleife sind weiter genutzt werden? Java Basics - Anfänger-Themen 7
mhmt_03 dafür sorgen, dass im JTextfield nur zahlen eingebbar sind Java Basics - Anfänger-Themen 9
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
A Haben KNNs ein Gedächtnis, lernen etwas oder verändern sich, während sie nicht trainieren, aber aktiv sind? Java Basics - Anfänger-Themen 3
M prüfen ob alle array werte gleich sind Java Basics - Anfänger-Themen 27
R Wozu sind Annotations da? Java Basics - Anfänger-Themen 3
H Was sind Package bei eclipse? Java Basics - Anfänger-Themen 1
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D Zwei Strings sind gleich bei if aber nicht true Java Basics - Anfänger-Themen 2
J Strings sind gleich werden aber ungleich ausgewertet Java Basics - Anfänger-Themen 2
H Array mit Zahlen die durch 3 und 5 teilbar sind erstellen Java Basics - Anfänger-Themen 13
J Klassen Math && Random: wie zufällig sind Zufallszahlen? Java Basics - Anfänger-Themen 19
L Prüfe, ob die im String Array enthaltenen Strings aufsteigend sind. Java Basics - Anfänger-Themen 19
D Fehlermeldung obwohl Variablen bereits deklariert sind? Java Basics - Anfänger-Themen 14
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
Azazel Wie wichtig sind Castings in Java ? Java Basics - Anfänger-Themen 1
S Was sind Java Beans? Java Basics - Anfänger-Themen 7
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
J Prüfen ob Arrays nur mit einem Wert belegt sind Java Basics - Anfänger-Themen 3
K Erste Schritte switch - Warum sind long/float/double/... nicht erlaubt? Java Basics - Anfänger-Themen 5
M Wie sicher sind Daten im Java Programm? Java Basics - Anfänger-Themen 9
T Wie vergleiche ich die Jahre aus der while Schleife die in ( public class) fuer cbx geschrieben sind Java Basics - Anfänger-Themen 5
P Wieviele Tage seit dem Datum vergangen sind Java Basics - Anfänger-Themen 5
P OOP Testen ob 2 Strings gleich sind Java Basics - Anfänger-Themen 8
M Welche externen Bibliotheken sind in Java sehr zu empfehlen? Java Basics - Anfänger-Themen 4
? Wie sind ESCAPE-Sequenzen (z.B \f für einen Seitenvorschub) richtig anuwenden? Java Basics - Anfänger-Themen 3
M Warum sind Strings Immutable? Java Basics - Anfänger-Themen 7
S Werte aus SingeltonKlasse sind manchmal =0 &manchmal !=0 Java Basics - Anfänger-Themen 1
M Sind solche boolean Anweisen empfehlenswert? Java Basics - Anfänger-Themen 3
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
M String überprüfen ob nur Buchstaben enthalten sind? Java Basics - Anfänger-Themen 10
Kenan89 Wo sind die Java Standard Library Source Codes zu finden? Java Basics - Anfänger-Themen 5
L JDK installieren Sind in src.zip tatsächlich die verwendeten Klassen? Java Basics - Anfänger-Themen 7
L Byte[] to String, doch bits sind gespiegelt (MSB/LSB) Java Basics - Anfänger-Themen 3
B Funktionen programmieren, die im Hintergrund aktiv sind Java Basics - Anfänger-Themen 2
S Von byte[] nach String zurueck nach byte[]. Arrays sind nicht identisch :( Java Basics - Anfänger-Themen 6
C hashCode() bei Klassen, die nicht immutable sind Java Basics - Anfänger-Themen 27
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
D Warum sind Generics mit Vorsicht zu genießen? Java Basics - Anfänger-Themen 6
E Was sind Javascript und Java EE? Java Basics - Anfänger-Themen 7
S Wie performance lastig sind rekursionen Java Basics - Anfänger-Themen 13
C Nach Java-Installation sind Befehle erfolglos Java Basics - Anfänger-Themen 4
B Variablen Warum sind die blau Java Basics - Anfänger-Themen 2
L Liste aller Klassen die in einem Paket sind Java Basics - Anfänger-Themen 7
S Warten bis alle Threads fertig sind Java Basics - Anfänger-Themen 12
M Erste Schritte zwei Buchstaben die im String enthalten sind ausgeben Java Basics - Anfänger-Themen 21
J Drei Errors sind drei zuviel! Java Basics - Anfänger-Themen 25
RySa Input/Output Datei kann nicht gelöscht werden, obwohl Streams geschlossen sind. Java Basics - Anfänger-Themen 2
H Wieviele Objekte gleichzeitig sind sinnvoll? Java Basics - Anfänger-Themen 4
S Dezimale Konstanten sind immer positiv oder null - was heisst das den genau? Java Basics - Anfänger-Themen 2
D Strings sind ungleich obwohl sie in der Ausgabe gleich sind Java Basics - Anfänger-Themen 10
D Sind Enums typsichere Konstanten? Java Basics - Anfänger-Themen 15
S Warum sind Attribute der Klasse java.awt.Point public? Java Basics - Anfänger-Themen 3
T Buttons (auf denen bilder sind) random vertauschen Java Basics - Anfänger-Themen 11
W Array nach Elemenden die durch 2 teilbar sind durchsehen Java Basics - Anfänger-Themen 9
N TextZeile in einzelne Strings teilen, die mit Komma getrennt sind Java Basics - Anfänger-Themen 4
L Elemente die in Array1 sind aus Array2 löschen Java Basics - Anfänger-Themen 6
C Compiler-Fehler Variablen sind angeblich nicht initialisiert Java Basics - Anfänger-Themen 7
M Sind ternäre Operatoren für einen guten Programmierstil wichtig ? Java Basics - Anfänger-Themen 10
I Was sind denn überhaupt Doctypes bei Java? Java Basics - Anfänger-Themen 7
Developer_X Sounds abspielen, die im internet sind (.wav) Java Basics - Anfänger-Themen 2
A Erzeugte Objekte sind nicht bekannt Java Basics - Anfänger-Themen 16
H Warum sind in Java Strings und Arrays eigentlich unveränderlich? Java Basics - Anfänger-Themen 2
G Objekte von Klassen die erst zur Laufzeit bekannt sind erstellen Java Basics - Anfänger-Themen 6
nrg Datentypen Sind Arrays Objekte? Java Basics - Anfänger-Themen 9
B Für was sind die Annotationen gut? Java Basics - Anfänger-Themen 6
F import Statement für Klassen die dem default Package zugeordnet sind? Java Basics - Anfänger-Themen 2
T Probleme mit ArrayList, in der Objekte gespeichert sind, die ArrayLists enthalten Java Basics - Anfänger-Themen 2
Semox Sind Objekte in einer ArrayList überschreibbar? Java Basics - Anfänger-Themen 2
D 100.0% gleichmäßig aufteilen, so dass Summe 100.0% sind, nicht 99,9% oder 100,1% Java Basics - Anfänger-Themen 3
feuervogel Datentypen Zwei Sets sind gleich, aber dann doch nicht Java Basics - Anfänger-Themen 9
N java.util.Arrays.sort Warum sind Leerzeichen vor alphabetischen Zeichen sortiert? Java Basics - Anfänger-Themen 12
cowabunga1984 Unit-Testing - Welche Testfälle sind relevant? Java Basics - Anfänger-Themen 4
M Was sind das für Probleme? Java Basics - Anfänger-Themen 6
B was sind Dataflavor Java Basics - Anfänger-Themen 2
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
T Sind Kontrollflussanweisungen auch Methoden? Java Basics - Anfänger-Themen 5
N Wie schlimm sind Cyclen in einem Programm Java Basics - Anfänger-Themen 3
G welche Teile der api sind wichtig? Java Basics - Anfänger-Themen 3
T Was sind Attribute? Java Basics - Anfänger-Themen 9
P Was sind Vectoren und Maps in Java? Java Basics - Anfänger-Themen 3
G Sind das Generics Java Basics - Anfänger-Themen 2
P Prüfen ob alle zellen der tabelle leer sind Java Basics - Anfänger-Themen 9
C Alle Zeichen, die in der Console sind in Textdatei Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben