java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > Java Basics - Anfänger-Themen

Java Basics - Anfänger-Themen Fragen ausschließlich zu Java-Grundlagen von Ein- und Umsteigern

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 07.02.2007, 16:45   #1 (permalink)
Stammbenutzer
Kilobyte
 
Registriert seit: 08.06.2006
Beiträge: 223
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard Warum sind Interface-Methoden public?

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!
-frank ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.02.2007, 16:47   #2 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 06.02.2006
Beiträge: 6.269
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Hmmhh! Interessante Frage...
__________________
http://www.weltgebetsuhr.de/Signatur.gif
Leroy42 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 07.02.2007, 17:03   #3 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von thE_29
 
Registriert seit: 11.05.2004
Beiträge: 6.519
Blog-Einträge: 3
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
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..
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub)
Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/
thE_29 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 11:14   #4 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Beni
 
Registriert seit: 07.02.2004
Beiträge: 7.644
Abgegebene Danke: 0
Erhielt 13 Danke für 10 Beiträge
Ich habe ein bisschen rumgesucht, im Sun-Forum fand ich z.B. das hier:
Zitat:
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.
__________________
dock.javaforge.com

Byte-Welt
Beni ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 11:31   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von thE_29
 
Registriert seit: 11.05.2004
Beiträge: 6.519
Blog-Einträge: 3
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
Hier gibts viel zum Lesen

http://java.sun.com/docs/books/jls/s...faces.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!
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub)
Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/
thE_29 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 11:56   #6 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 02.01.2004
Beiträge: 1.495
Abgegebene Danke: 1
Erhielt 16 Danke für 16 Beiträge
Yo, aber bei jeder implementierenden Klasse sind die Methoden dann wieder öffentlich zugänglich...

mpG
Tobias
__________________
Freies Mitglied der Volksfront von Judäa
Tobias ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 12:20   #7 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 02.12.2003
Beiträge: 5.474
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
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!

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
__________________
Andy Clarke is hip and mature. You almost never get both. He is a seasoned brand steward, a fancy pixel wrangler, and no mean hand at code. A triple talent. The bastard. - Jeffrey Zeldman
http://www.alexander-langer.de
AlArenal ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 13:00   #8 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von thE_29
 
Registriert seit: 11.05.2004
Beiträge: 6.519
Blog-Einträge: 3
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
Dann Frag die Köpfe vom Swing Team, sie sollen dir die Mail addys von den Konzepttypen schicken

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...
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub)
Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/
thE_29 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 14:51   #9 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 06.02.2006
Beiträge: 6.269
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Zitat: AlArenal
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.
__________________
http://www.weltgebetsuhr.de/Signatur.gif
Leroy42 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 14:54   #10 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 02.12.2003
Beiträge: 5.474
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
Zitat: Leroy42
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.
Ja, alle lieben Smalltalk!

http://www.spiegel.de/kultur/zwiebel...394969,00.html
__________________
Andy Clarke is hip and mature. You almost never get both. He is a seasoned brand steward, a fancy pixel wrangler, and no mean hand at code. A triple talent. The bastard. - Jeffrey Zeldman
http://www.alexander-langer.de
AlArenal ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 15:00   #11 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 06.02.2006
Beiträge: 6.269
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
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. )
__________________
http://www.weltgebetsuhr.de/Signatur.gif
Leroy42 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 15:09   #12 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 02.12.2003
Beiträge: 5.474
Abgegebene Danke: 0
Erhielt 1 Danke für 1 Beitrag
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...
__________________
Andy Clarke is hip and mature. You almost never get both. He is a seasoned brand steward, a fancy pixel wrangler, and no mean hand at code. A triple talent. The bastard. - Jeffrey Zeldman
http://www.alexander-langer.de
AlArenal ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 08.02.2007, 16:14   #13 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 25.12.2009
Beiträge: 3.282
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat:
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.


Zitat: thE_29
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

Zitat: AlArenal
P.S.:
Ich habe einen buschigen Schwanz...
öh Im Second Life hinten oder im First Life vorne?
__________________
java macht schöner und erhöht die lebenserwartung
stev.glasow ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 09.02.2007, 16:20   #14 (permalink)
Benutzer
Byte
 
Registriert seit: 08.02.2007
Beiträge: 44
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
Aske ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 12.02.2007, 19:28   #15 (permalink)
Stammbenutzer
Kilobyte
Themenstarter
 
Registriert seit: 08.06.2006
Beiträge: 223
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat: stevg
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.
-frank ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 12.02.2007, 19:39   #16 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Wildcard
 
Registriert seit: 10.11.2004
Beiträge: 18.262
Abgegebene Danke: 0
Erhielt 128 Danke für 126 Beiträge
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.
__________________
Take back the Desktop
Wildcard ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 12.02.2007, 20:02   #17 (permalink)
Stammbenutzer
Viertel Gigabyte
 
Registriert seit: 25.12.2009
Beiträge: 3.282
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat:
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
__________________
java macht schöner und erhöht die lebenserwartung
stev.glasow ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.02.2007, 08:54   #18 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von thE_29
 
Registriert seit: 11.05.2004
Beiträge: 6.519
Blog-Einträge: 3
Abgegebene Danke: 0
Erhielt 4 Danke für 4 Beiträge
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!
__________________
Wir machen Fehler aus Versehen, die anderen aus Dummheit. (Gabriel Laub)
Pur Java Registry Reader - http://sourceforge.net/projects/java-registry/
thE_29 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.02.2007, 14:40   #19 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 11.09.2005
Beiträge: 1.059
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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*
__________________
"The use of COBOL cripples the mind; its teaching should, therefore, be
regarded as a criminal offence."

Edsger W. Dijkstra
SnooP ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 13.02.2007, 14:50   #20 (permalink)
Stammbenutzer
Halbes Gigabyte
 
Registriert seit: 06.02.2006
Beiträge: 6.269
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Langsam wirds hier richtig philosophisch.
__________________
http://www.weltgebetsuhr.de/Signatur.gif
Leroy42 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
(Anfängerproblem) Problem mit dem Aufruf von public-Methoden Java Basics - Anfänger-Themen 3 15.04.2008 10:58
Methoden in abstrakter Klasse: public oder protected? Ocean-Driver Allgemeine Java-Themen 16 19.02.2008 11:20
Warum sind sie so unterschiedlich? enriico Allgemeine Java-Themen 1 27.11.2006 14:22
public Methoden in Interfaces Malcolm X Java Basics - Anfänger-Themen 5 24.12.2005 12:07
Was sind Klassen, Objekte und Methoden? Java Basics - Anfänger-Themen 3 12.12.2004 17:43


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:08 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de