static mit abstract und in interface

Status
Nicht offen für weitere Antworten.
S

stev.glasow

Gast
wieso kann man static nicht in kombination mit abstract und nicht in interfaces benutzen.
 

HeyMan

Mitglied
hatte glaub ich was mit der verhinderung von dead locks zu tun.
bin mir aber nicht mehr ganz sicher.
heyman
 

René Link

Aktives Mitglied
Hi,

als erstes musst du dir über zwei Ebenen ganz klar werden. Die eine Ebene ist die Klassen Ebene
die andere die Objekt-Ebene.

Mit abstract erzwingst du, dass eine Subklasse diese Methode überschreiben muss.
Static bedeutet, dass es eine Eigenschaft oder Methode einer Klasse ist.

Was würde jetzt also passieren, wenn du static mit abstract verbindest?
Du würdest verlangen, dass eine statische Methode in einer Subklasse überschrieben werden soll.
Da du auf statische Methoden über die Klasse zugreifst und nicht über das Objekt macht
das keinen Sinn. Oder anderes ausgedrückt. Überschreiben basiert auf dem Typ des Objekts und
statische Methoden sind einer Klasse zugeordnet.

Warum abstract und static nicht zusammen geht müsste jetzt klar sein.
Nun zu den Interfaces.
Interfaces sind ja nur Schnittstelleninformationen. Oder anders ausgedrückt Methoden deklarationen.
Jede Klasse, welche ein Interface implementiert, muss also diese Methoden implementieren.
Die Methoden eines Interfaces sind implizit 'public abstract'. Dadurch wird erzwungen, dass die Methoden
implementiert werden müssen. Wie eben gezeigt, können sie nicht gleichzeitig static sein. Was ist
aber mit den anderen Zugriffsmodifizierern. Warum public?
Was wäre, wenn sie private wären? Dann würde das keinen Sinn machen. Warum?
Weil dann die Schnittstelle nur der Klasse bekannt wäre, welche dieses Interface implementiert.
Das ist Unsinn, weil eine Klasse ihre eigene Schnittstelle immer kennt. Mit Interfaces will man ja
gerade erreichen, dass man einer anderen Klasse zusichert, dass man die Schnittstelle implementiert.
Anders ausgedrückt - dass man über eine bestimmte Funktionalität verfügt.

In Interfaces können aber auch Variablen definiert werden. Diese sind implizit 'public static final'.
Macht auch Sinn, weil die Werte der Variablen zu der Schnittstelle gehören, sollen sie nicht veränderbar sein.
Variablen welche nur gelesen werden können braucht man nicht mit jedem Objekt neu anzulegen. Deshalb static. :lol:

Ich hoffe das hilft etwas weiter.
Schau dich auch mal hier um:
http://www.computer-link.de/view.php?chapterID=30
http://www.computer-link.de/view.php?docID=3
 

mephi

Bekanntes Mitglied
was die suche alles ausspuckt.. :)
so hab mich eben dafür interessiert wie man ein singleton ansatz im interface festhalten soll..

René Link hat gesagt.:
Was würde jetzt also passieren, wenn du static mit abstract verbindest?
Du würdest verlangen, dass eine statische Methode in einer Subklasse überschrieben werden soll.
Da du auf statische Methoden über die Klasse zugreifst und nicht über das Objekt macht
das keinen Sinn. Oder anderes ausgedrückt. Überschreiben basiert auf dem Typ des Objekts und
statische Methoden sind einer Klasse zugeordnet.

der typ eines objekts ist ja die klasse.. !?
warum soll ich eine subklasse eine statische methode nicht überschreiben? versteh ich nicht wirklich..
 

Murray

Top Contributor
mephi hat gesagt.:
Warum soll ich eine subklasse eine statische methode nicht überschreiben? versteh ich nicht wirklich..

Das musst du Gosling & Co fragen; ansonsten ist das eine Tatsache, die man einfach hinnehmen muss: statische Member kann man nicht überschreiben.

/EDIT: Typos
 

Wildcard

Top Contributor
Das ist keine Tatsache die man hinnehmen muss, alles andere wäre schlicht und ergreifend völliger Unsinn.
Das Überschreiben von Methoden macht im Bereich der Verebung Sinn, statische Methoden sind jedoch nicht an Objekte gekoppelt und fallen daher komplett aus der Verebung raus.
 

Murray

Top Contributor
Wildcard hat gesagt.:
Das ist keine Tatsache die man hinnehmen muss, alles andere wäre schlicht und ergreifend völliger Unsinn.
Das ist - zumindest ein Stück weit - Ansichtssache: angemommen, ich habe Class A mit mit
Code:
public static A getInstance()  {
  return new a())
}
und davon abgeleitet
Code:
Class B extends A {
public static B getInstance()  {
  return new b())
}
}

Wenn ich jetzt per Reflection ein Objek objB vom Typ B am Wickel habe, dann liefert mir ovbjB.class.getMethods beide getInstance-Methoden - da könnte man der Meinung sein, dass immer die der MDC geliefert werden sollte.

Wenn man dieses Verhalten aber einmal verinnerlicht hat, dann kommt man auch mit dieser Philosophie zurecht.
 

Hilefoks

Bekanntes Mitglied
Code:
public Class A {
  public static A getInstance()  {
    return new a())
  }
}
und davon abgeleitet
Code:
Class B extends A {
  public static B getInstance()  {
    return new b())
  }
}
Die static Methode ist nicht an die Instanz gebunden. Sie existiert nur einmal. Wenn die Klasse B diese überschreiben könnte, dann wär diese Methode auch für A überschrieben - daher ist es nicht möglich sie zu überschreiben.

MfG,
Hilefoks
 

mephi

Bekanntes Mitglied
das sind jetzt sehr gute beispiele *g* aber mir ist halt vollkommen nicht klar warum die vererbung an die instanz gebunden sein muss(soll) und nicht an die klasse
vielleicht steh ich nur ich nur auf dem schlauch oder vielleicht ist mir der tiefere sinn nicht klar. aber .... ich verstehs nicht *g*

wenn ich eine statische methode einer klasse hab, dann mag diese erstmal nichts mit der instanz zutun haben die von dieser klasse erbt. aber die erbende klasse wiederum hat ja was damit zutun.
gerade am beispiel des singleton macht eine mögliche vererbung für mich mehr sinn als dass diese nicht möglich ist...
 
B

Beni

Gast
Der Witz an der Vererbung ist doch, dass du im Code etwas haben kannst wie...
Code:
object.doSomething()
... und jenachdem, was "object" für einen Wert hat, werden verschiedene "doSomething"-Methoden aufgerufen.

Bei einer static-Methode hast du aber...
Code:
Klasse.doSomething()
... und "Klasse" ist immer dasselbe. Also nützt dir hier Vererbung einfach nichts.

Ich gebe zu, dass in ganz seltenen Fällen eine static-Vererbung nützlich sein könnte. Aber das ist so selten, dass ich sie nicht vermisse.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Methoden abstract static Methode Allgemeine Java-Themen 8
N nicht static und auch nicht new Allgemeine Java-Themen 3
P static Blocks und variablen Allgemeine Java-Themen 41
Kirby.exe Cannot make a static reference to the non-static field rimWidth Allgemeine Java-Themen 12
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S static in Interface und Klasse Allgemeine Java-Themen 2
S static methode im Interface Allgemeine Java-Themen 1
A Variablen non-static variable cannot be referenced from a static content Allgemeine Java-Themen 4
P Static Variable -> unterschiedliche Werte? Allgemeine Java-Themen 1
K Static Variablen verbieten Allgemeine Java-Themen 10
C Generic collections und static typing Allgemeine Java-Themen 4
M Warum nicht static ? Allgemeine Java-Themen 10
M Eine static-Methode verlassen Allgemeine Java-Themen 2
B Schlüsselworte [ERLEDIGT] static { } - Was ist das und wofür kann ich das brauchen? Allgemeine Java-Themen 1
J private static final String variable Allgemeine Java-Themen 8
L Non-static-Variables in Enumerationen Allgemeine Java-Themen 2
L OOP Klassen-Design (static oder nicht?) Allgemeine Java-Themen 3
T Enumeration/Static Final/Bitfield Allgemeine Java-Themen 6
T Static kann nicht verändert werden Allgemeine Java-Themen 3
W Threads Cannot make a static reference.. Allgemeine Java-Themen 13
H Programierstil: static - Zugriff vs. Staticzugriff Allgemeine Java-Themen 24
N Static oder andere Lösung Allgemeine Java-Themen 5
N Vererbung Static & private fields - Nicht ganz einfach? Allgemeine Java-Themen 4
M Wo hin mit static factory methods? Allgemeine Java-Themen 40
M Public Static importRunning -> Bad Design oder ok ? Allgemeine Java-Themen 5
S Cannot make a static reference to the non-static field MySecondClass.Points Allgemeine Java-Themen 3
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
K Static - Problem Allgemeine Java-Themen 10
M Variablen Variablenzugriff aus static void Allgemeine Java-Themen 21
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
S static methoden Allgemeine Java-Themen 9
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
X HTTP Problem mit static/non static JTextArea Update Allgemeine Java-Themen 17
A Annotation einer Subklasse im static-Block auslesen. Allgemeine Java-Themen 6
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
B static Variable / Unterklasse Allgemeine Java-Themen 2
I Was macht static { ... } ? Allgemeine Java-Themen 8
G static inner Klassen Allgemeine Java-Themen 7
G static und dynamic linking? Allgemeine Java-Themen 32
J in einer static Variable Wert ändern Allgemeine Java-Themen 6
J Verständnisfrage - nested static classes Allgemeine Java-Themen 11
G static- Methoden überschreiben Allgemeine Java-Themen 10
E Geschwindigkeit static Allgemeine Java-Themen 6
V Static oder wie? Allgemeine Java-Themen 61
I reflection get inner static classes Allgemeine Java-Themen 2
L static main - Spezifikation? Allgemeine Java-Themen 7
G URLClassLoader stößt static Block nicht an Allgemeine Java-Themen 8
D static Allgemeine Java-Themen 46
P static-Methode aus dem Konstruktor aufrufen Allgemeine Java-Themen 6
oliver1974 "(.) should be accessed in a static way" Falsche W Allgemeine Java-Themen 6
P static Klassenvariable Allgemeine Java-Themen 15
B JPasswordField klassenübergreifend auslesen->static Probl Allgemeine Java-Themen 4
F Methoden: static vs. instance Allgemeine Java-Themen 24
MQue static Methoden/Klassen Allgemeine Java-Themen 7
K Warum static-Methoden nutzen Allgemeine Java-Themen 26
G Java-Befehle Native und Static Allgemeine Java-Themen 2
conan2 static-Block in Klassen Allgemeine Java-Themen 6
M JNI, static.a mit load.Library laden? Allgemeine Java-Themen 2
K Static Members von Superklasse für JEDEN Erben Allgemeine Java-Themen 6
padde479 The static method sleep(long) from the type Thread should. Allgemeine Java-Themen 2
M static-Methode vorschreiben Allgemeine Java-Themen 5
S singleton vs. static Allgemeine Java-Themen 7
G Object mit static Feldern speichern Allgemeine Java-Themen 9
J Warum heißt es eig. "public static void main" ? Allgemeine Java-Themen 4
conan2 "Cannot make a static reference to the non-static field Allgemeine Java-Themen 8
P Singleton vs static Allgemeine Java-Themen 19
J parameterized und static fields Allgemeine Java-Themen 4
A Static reference to non-static field Allgemeine Java-Themen 10
S static umgehen Allgemeine Java-Themen 5
G static oder nicht Allgemeine Java-Themen 4
J Problem mit static/non-static Allgemeine Java-Themen 2
G getAppletContext() in static Methode Allgemeine Java-Themen 3
m@nu Programm-Models in Static-Objekten speichern Allgemeine Java-Themen 5
J Nicht-static variable in static variable kopieren - wie? Allgemeine Java-Themen 14
O does not declare a static final serialVersionUID field of . Allgemeine Java-Themen 6
G static vor einem array Allgemeine Java-Themen 2
K Überschreiben von 'static'-Methoden hat anderes Verhalten? Allgemeine Java-Themen 2
A JSP & static-Variablen Allgemeine Java-Themen 3
B Static Import: Syntaxfrage Allgemeine Java-Themen 2
S Static + Speicher + Bytecode etc. Brauche HILFE :/ Allgemeine Java-Themen 11
Z auf static Methode aus anderen Package zugreifen? Allgemeine Java-Themen 7
N this im public static void Allgemeine Java-Themen 3
C Communication zwischen zwei Projekte - static objects Allgemeine Java-Themen 4
L Vererbung Using @Autowired in Abstract Classes Allgemeine Java-Themen 4
T Interface vs abstract Allgemeine Java-Themen 2
S Klassen Abstract, Interface und ein Chat Tool Allgemeine Java-Themen 1
I Interface Interface / Klasse - wieso Abstract? Allgemeine Java-Themen 13
S Frage zu abstract Allgemeine Java-Themen 5
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
N Unterschied abstract interface und interface Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
G Abstract class Stillfrage Allgemeine Java-Themen 4
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5
M abstract Methode aufrufbar? Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
T abstract + clone() = BUMM! Allgemeine Java-Themen 3
M ist "public abstract class * extends" möglich? Allgemeine Java-Themen 2
T abstract - interface Unterschied Allgemeine Java-Themen 22

Ähnliche Java Themen

Neue Themen


Oben