1Danke
ERLEDIGT
JA
JA
ANTWORTEN
9
9
ZUGRIFFE
11229
11229
EMPFEHLEN
-
Hallo,
ich versuche gerade ein Interface zu definieren, bei dem die implementierenden Klassen des Interface, umbedingt eine static Methode haben müssen.
Das Problem ist das man ja in Interfaces keine static Methoden definieren kann, aber ich auch in der implentierenden Klasse diese nicht static überschreiben darf ...
Gibt es da irgend ne Lösung dafür, oder übersehe ich da etwas ?
Nochmal zur Verdeutlichung, da ich den Text selber verwirrend finde :P
Interface A
{
public static String getIrgendwas();
}
Klasse B implements A
{
public static String getIrgendwas(){return "doof";};
}
Gruß Gollrich
-
15.01.08 16:08 #2
Welchen Sinn sollte denn bitte eine statische Methode in nem Interface haben. Hast du verstanden wozu Interfaces gut sind? Statische Methoden sollten die Ausnahme sein, da sie erstens nicht wirklich objektorientiert sind und zweitens zu nahezu untestbarem Code führen, da sie den Client an die Implementierung koppeln. Interfaces verhindern gerade das. Scheint, als hättest du einen grundsätzlichen Denkfehler im Design.
Gruß
OllieGeändert von Oliver Gierke (15.01.08 um 16:11 Uhr)
-
15.01.08 16:31 #3MeinerEiner_80 Tutorials.de Gastzugang
Moin!
Wenn du uns verrätst, wozu du sowas benötigst, könnte man unter Umständen eine Lösung für das Problem finden...
*grüssle*
MeinerEiner
PS:
Auch wenn man solche Sachen mit Vorsicht geniessen muss, sowas geht schon:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
public interface A { public static String test = "testA"; } public class B implements A{ public static String test = "testB"; /** Creates a new instance of B */ public B() { } } public class C implements A{ public static String test = "testC"; /** Creates a new instance of C */ public C() { } }
Code :1 2 3 4 5
public static void main(String[] args) { System.out.println(B.test); // Gibt testB aus System.out.println(C.test); // Gibt testC aus }
Aber hübsch ist sowas nicht...Geändert von MeinerEiner_80 (15.01.08 um 16:42 Uhr)
-
16.01.08 12:18 #4
- Registriert seit
- Aug 2005
- Ort
- Karlsruhe (Baden-Württemberg)
- Beiträge
- 905
Damit eine Methode nicht überschrieben werden kann, muss diese in der Mutterklasse das Attribut final enthalten.
nach ner kurzen Suche...hier haben auch schon einige über diese Frage diskutiert..
http://www.jguru.com/faq/view.jsp?EID=88225Wäre super wenn ihr euren Code in dieser Form einfügt:
[java]System.out.println("Hello World");[/java]Code java:1
System.out.println("Hello World");
Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
Blog: http://javaeffective.wordpress.com/
-
16.01.08 14:47 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.885
- Blog-Einträge
- 29
Hallo,
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
/** * */ package de.tutorials; /** * @author Thomas.Darimont * */ public class MethodsOnInterfaces { /** * @param args */ public static void main(String[] args) { Interface.Methods.print(); } static interface Interface{ static class Methods{ public static void print(){ System.out.println("bubu"); } } } }
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
14.11.08 15:59 #6
Hi,
bin auch gerade über diese Frage gestolpert. Allerdings habe ich noch kein vernünftiges Argument gefunden warum dies nicht möglich sein sollte. Ein Interface ist für mich in erster Linie ein Vertrag was eine Klasse für Methoden bereitstellt.
Warum static Methoden davon ausgeschlossen werden erschließt sich mir nicht.
@Oliver: Verstehe deine Aussage auch nicht warum eine static Methode in einem Interface die Implementierung an den Client? koppelt, oder warum dadurch etwas untestbar werden sollte.
Würde aber gerne wissen was sich die Java Designer bei dieser Regel gedacht haben. Man lernt ja nie aus
VG,
ck.
-
14.11.08 16:22 #7
- Registriert seit
- Aug 2007
- Beiträge
- 166
Um es verstaendlich zu machen:
Es gibt eine Interface I, eine Klasse A und eine Klasse B. A und B implementieren I.
Code java:
Nun rufen wir
Code java:1
I.doFoo();
auf.
Preisfrage: Soll nun A.doFoo() oder B.doFoo() waehrend der Laufzeit ausgefuehrt werden? (Nein das ist kein gueltiger Code, sondern die Frage, die sich die Sprachdesigner stellen mussten).
Siehe oben. Es ist nicht bestimmbar welche Methode zur Laufzeit ausgefuehrt werden soll. Also muss man, wenn statische Methoden genutzt werden, den Client direkte an eine Klasse binden.@Oliver: Verstehe deine Aussage auch nicht warum eine static Methode in einem Interface die Implementierung an den Client? koppelt, oder warum dadurch etwas untestbar werden sollte.
Wenn man diesen Syntax als Vertrag interpretieren wuerde, haette man imme noch das gleiche Problem, man braucht zum Aufruf der statischen Methode immer noch eine konktrete Klasse. Ob die Signatur in diesem Fall frei definiert wird oder per Vertrag festgelegt wird ist im Endeffekt irrelevant, weil es eine reine kosmetische Vorgabe ist.I'm not slacking off!
My code's just compiling.
-
14.11.08 17:22 #8
Danke für die ausführliche Antwort!!
Sehe jetzt die Problematik
-
01.12.11 15:41 #9
- Registriert seit
- Jul 2011
- Beiträge
- 2
Obwohl es auf diesem Thread schon eine ganze Zeit keine Aktivität mehr gab möchte ich doch noch meinen Senf dazu geben:
Wenn du nur sichergehen willst, dass die betreffende methode in der entsprechenden Klasse existiert so definiere sie doch einfach in einer abstakten Basisklasse.
-
01.12.11 15:50 #10
- Registriert seit
- Jul 2011
- Beiträge
- 2
Sorry war zuschnell mit schreiben. Nach erneutem durchdenken hab ich rausgefunden, dass überschreibbare methoden ja gar nicht statisch sein können.
Ähnliche Themen
-
non-static methode mit static class aufrufen?
Von Error999 im Forum JavaAntworten: 5Letzter Beitrag: 30.09.08, 16:22 -
Interface in Methode übergeben?
Von downset04 im Forum JavaAntworten: 9Letzter Beitrag: 16.05.08, 21:28 -
Static Variable in Methode
Von higret im Forum C/C++Antworten: 5Letzter Beitrag: 25.05.05, 15:20 -
C++ .Net Thread ohne static methode
Von splizzer im Forum .NET ArchivAntworten: 1Letzter Beitrag: 21.03.05, 09:13 -
auf static Methode aus anderen Package zugreifen?
Von ZAntjeZ im Forum JavaAntworten: 4Letzter Beitrag: 13.08.04, 18:20





Zitieren

Login





