Statische Member können nicht vererbt werden?

E

EinsZweiDreiG

Gast
Hallo!

Eigentlich heißt es doch immer, statische Member könnten nicht vererbt werden. Warum geht dann folgendes:

[Java]
public class ClassA {
public static void lol(){
System.out.println("im a");
}
}

public class ClassB extends ClassA {

// leer

}

public class Main {

public static void main(String[] args){

ClassB b = new ClassB();

b.lol();

}

}
[/code]


Danke!
 
S

SlaterB

Gast
ich überlege mir gar verschiedene Formulierungen, aber nichts trifft es richtig,
das Interface-Konzept oder Überschreiben von Methoden kann man als andere Themen betrachten,

da mache ich es mir einfach: 'statische Member könnten nicht vererbt werden' stimmt nicht, wo hast du das her?
wenn man nur betrachtet, ob Attribute oder Methoden auch für Subklassen sichtbar sind (ohne Überschreiben, was bei static mangels Typ-Zugriff eh keinen Sinn macht), dann gilt das für static wie für nicht-static
 

Atze

Top Contributor
naja, statics sind zwar sichtbar, aber gehören weder zu einem objekt (sondern zu der klasse), werden zur compilezeit definiert und nehmen nicht am polimorphismus teil, also ist es keine wirkliche vererbung! sie sind einfach da ;) so wie katzen :D
 

Momolin

Aktives Mitglied
Hallo,

vor allem sollte man auf statische Methoden nicht über ein Objekt,
sondern über den Klassennamen zugreifen, da für alle Objekt genau
die selbe (nicht gleiche) Methode zur Verfügung steht.
[Java]
public class ClassA {
public static void lol(){
System.out.println("im a");
}
}

public class ClassB extends ClassA {

// leer

}


vorallem sollte man auf statische Methoden nicht über ein Objekt zugreifen:

public class Main {

public static void main(String[] args){

ClassB b = new ClassB();

// ist nicht gut
b.lol();

// so ist es besser
ClassA.lol();


}

}
[/code]

Grüße
Momolin
 

musiKk

Top Contributor
werden zur compilezeit definiert und nehmen nicht am polimorphismus teil

Naja, wie definiert man "am Polymorphismus teilnehmen"? Folgendes geht ja auch:
Java:
class Foo {
	protected static void foo() {
		System.err.println("foo!");
	}
}

class Bar extends Foo {
	protected static void bar() {
		foo();
	}
}
"Nimmt" jetzt die Methode foo() am "Polymorphismus teil" oder nicht? Man kann es natürlich so aufziehen, dass die Methode nicht vererbt, sondern lediglich auch in Unterklassen sichtbar ist. Bei static dürfte das aber wohl aus Anwendersicht beides aufs gleiche hinauslaufen.
 

Atze

Top Contributor
Naja, wie definiert man "am Polymorphismus teilnehmen"? Folgendes geht ja auch:
Java:
class Foo {
	protected static void foo() {
		System.err.println("foo!");
	}
}

class Bar extends Foo {
	protected static void bar() {
		foo();
	}
}
"Nimmt" jetzt die Methode foo() am "Polymorphismus teil" oder nicht? Man kann es natürlich so aufziehen, dass die Methode nicht vererbt, sondern lediglich auch in Unterklassen sichtbar ist. Bei static dürfte das aber wohl aus Anwendersicht beides aufs gleiche hinauslaufen.

die methode nimmt nicht am polymorphismus teil, indem sie nicht objektgebunden und nicht overridable ist, in einer subklasse nur verdeckt werden kann. klar kannst du sie aus der unterklasse aufrufen, aber es ist immernoch die superklassenmethode. der polymorphismus (typ-spezifisches verhalten) ist einfach weg.
 

musiKk

Top Contributor
Objektgebunden sind statische Methoden nicht, das ist schon richtig. Darum geht es bei Polymorphie ja aber nur bedingt. Statische Methoden sind einfach nur "eine Ebene weiter oben". Eine Klassendefinition kann man ja als Instanz des abstrakten Konzepts "Klasse" bezeichnen. Statische Methoden sind dann einfach die Methoden auf diesen verschiedenen Klassen. In Java wird darüber eher weniger nachgedacht; in Haskell hingegen gibt es z. B. Kinds, die Typen klassifizieren. Wobei das wohl eher in Richtung Generics geht.

In Java kann man ja auch
Java:
class Foo {
	protected static void foo() {
		System.err.println("foo!");
	}
}

class Bar extends Foo {
}

class Baz extends Foo {
	protected static void foo() {
		System.err.println("baz!");
	}
}
definieren. Die Aufrufe
Java:
Foo.foo();
Bar.foo();
Baz.foo();
verhalten sich dann genau so, wie man es sich vorstellt. Ohne die Klassendefinitionen und einen Kontext kann man die unteren drei Zeilen ja auch anders interpretieren: Foo, Bar und Baz sind Instanzen einer Klasse Qux (oder einer Unterklasse Quux) und foo() ist eine ganz normale nicht-statische Methode, die in den Klassen Qux, Quux, ... definiert und überschrieben (oder nicht) wird.

Es kommt eben immer darauf an, welchen Ausschnitt von [c]Klasse (Konzept) - Klasse (Definition) - Instanz[/c] man betrachtet. Bei statischen Methoden sind es die ersten beiden, bei Instanzmethoden die letzten beiden. Das Verhalten ist aber äquivalent.
 
T

Tomate_Salat

Gast
mal ne ganz doofe frage:
Java:
public class Foo 
{
    public static void out()
    {
        Bar.out();
        System.out.println("in Foo");
    }
    
    public static void main(String[] args) 
    {
        Foo.out();
        Bar.out();
    }
}

class Bar
    extends Foo
{
    public static void out()
    {        
        System.err.println("in Bar");
    }
}
wieso führt das zur Ausgabe:
Code:
in Bar
in Bar
in Foo

und nicht wie ich erwarten würde:
Code:
in Bar
in Foo
in Bar
?!
 
S

SlaterB

Gast
ist das eine Knobelaufgabe?
weil du zwei verschiedene Streams benutzt und die ihre Ausgaben nicht in chronologischer Reihenfolge zueinander weiterreichen

in Eclipse auch an unterschiedlichen Farben erkennbar (rot, nicht rot)
 
T

Tomate_Salat

Gast
Ouh, ja ok daran hats gelegen, danke. Hatte noch nie [c]System.err[/c] benutzt und dachte mir: JETZT kannstes mal testen :p und dabei total missachtet dass ich hier 2 streams vorliegen habe^^.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
C Größte Zahl aus einem Array ermitteln(als statische Methode) Java Basics - Anfänger-Themen 31
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
V Variablen statische Variable einer Objektvariable zuordnen Java Basics - Anfänger-Themen 3
S Klassen statische Objekterzeugung vor Konstruktoraufruf??? Java Basics - Anfänger-Themen 6
Queiser Nicht statische Klassen Java Basics - Anfänger-Themen 6
B Statische Methode return funktioniert nicht. Java Basics - Anfänger-Themen 19
C nicht statische Methoden Java Basics - Anfänger-Themen 4
D statische generische Methoden Java Basics - Anfänger-Themen 3
D Statische Variablen/Methoden Java Basics - Anfänger-Themen 3
S Zufallszahl (Statische Attribute und Methoden) Java Basics - Anfänger-Themen 10
N Auf statische Methode zugreufen Java Basics - Anfänger-Themen 9
R Methoden Nicht statische Methode aus Main aufrufen Java Basics - Anfänger-Themen 2
F Privater Konstruktor und statische Methoden Java Basics - Anfänger-Themen 4
S ActionListener und Statische Variablen Java Basics - Anfänger-Themen 4
D Statische Objekte mit variablem Parameter Java Basics - Anfänger-Themen 1
K Wieso muss man finale statische Variablen sofort oder eben im Konstruktor initialisieren? Java Basics - Anfänger-Themen 2
F Statische Klasse => Flaschenhals? Java Basics - Anfänger-Themen 10
T Statische Arrays von Objekten Java Basics - Anfänger-Themen 2
S Java Fragen Konstruktor & Statische Methoden Java Basics - Anfänger-Themen 4
B Java Programm ohne statische Main Methode aufrufen Java Basics - Anfänger-Themen 5
S Datentypen nicht lineare STATISCHE Datenstruktur? Java Basics - Anfänger-Themen 10
E statische Variable ändert sich Java Basics - Anfänger-Themen 7
A Statische Variable in Methoden Java Basics - Anfänger-Themen 7
P Klassen statische oder dynamische(?) Klasse Java Basics - Anfänger-Themen 3
A Nicht-statische Methode in einer statischen aufrufen Java Basics - Anfänger-Themen 10
M Wann statische Methoden/Attribute? Java Basics - Anfänger-Themen 2
M Statische Methoden in Interface/Abstrakte Klasse Java Basics - Anfänger-Themen 6
J statische Methoden auf eine LinkedList initialisieren? Java Basics - Anfänger-Themen 5
A statische Arraylist Java Basics - Anfänger-Themen 6
Q Variablen Statische Variablen Java Basics - Anfänger-Themen 8
J Unterschied zwischen statische und nicht statische Methoden? Java Basics - Anfänger-Themen 14
V OOP Statische Klassen-Attribute vererben Java Basics - Anfänger-Themen 4
K Statische Bindung Java Basics - Anfänger-Themen 6
B dynamische/statische Typen Java Basics - Anfänger-Themen 2
L Methoden Auf statische Methode einer anderen Klasse zugreifen, die Array zurückgibt Java Basics - Anfänger-Themen 3
S statische Methode nebenläufig Java Basics - Anfänger-Themen 2
R Aufruf statische Methode Java Basics - Anfänger-Themen 7
M Statische Methoden Java Basics - Anfänger-Themen 22
C Relativer Pfad - Statische Methode Java Basics - Anfänger-Themen 6
A Statische Methode "vererben" - Zwang durch annotation processor Java Basics - Anfänger-Themen 10
sqsh statische jlabels dynamisch verwalten Java Basics - Anfänger-Themen 2
S Statische Klassen/ Singleton Java Basics - Anfänger-Themen 13
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
B statische Variable Java Basics - Anfänger-Themen 10
M Statische und nicht-statische Funktionen: Desktop.browse(uri); Java Basics - Anfänger-Themen 4
A Stilfrage: statische Methoden und Attribute auf jeden Fall verhindern? Java Basics - Anfänger-Themen 5
A Stilfrage: statische Variable mit Instanz der gleichen Klasse Java Basics - Anfänger-Themen 8
H Statische generische Methode Java Basics - Anfänger-Themen 2
A statische Attribute: Vererbung und Zugriff darauf Java Basics - Anfänger-Themen 15
hdi Observer als statische Klasse ? Java Basics - Anfänger-Themen 2
hdi statische synchronisation Java Basics - Anfänger-Themen 6
G statische ArrayList? Java Basics - Anfänger-Themen 8
K Statische Variablen von Objekten im Array Java Basics - Anfänger-Themen 15
K nicht-statische Methode aufrufen Java Basics - Anfänger-Themen 3
S statische variable initialisieren mit exception Java Basics - Anfänger-Themen 2
G statische Variable zugreifen bzw. setzen Java Basics - Anfänger-Themen 6
T in statischem Kontext auf nicht statische Variable beziehen Java Basics - Anfänger-Themen 5
M Statische Funktion Java Basics - Anfänger-Themen 2
M öffentliche nicht-statische Funktion fremder Klasse ausführn Java Basics - Anfänger-Themen 16
C args[] als statische Variablen speicher oder wie? Java Basics - Anfänger-Themen 12
P nicht statische methode instantiieren Java Basics - Anfänger-Themen 7
H statische methoden und sichtbarkeit Java Basics - Anfänger-Themen 13
nadoria statische Methoden (Klassenmethoden) Java Basics - Anfänger-Themen 3
K statische variablen und methode Java Basics - Anfänger-Themen 3
H Was ist nocheinmal eine statische Klasse? Java Basics - Anfänger-Themen 6
G Statische Methoden? Java Basics - Anfänger-Themen 2
kb statische methoden und throws exception Java Basics - Anfänger-Themen 2
H statische, dynamischer Typ von Variablen Java Basics - Anfänger-Themen 1
M Konstruktor eine statische Methode? Java Basics - Anfänger-Themen 9
H statische,dynamische Bindung Java Basics - Anfänger-Themen 4
N Unterschied statische Attribute u. Methoden <-> objekt Java Basics - Anfänger-Themen 4
O nicht-statische Inhalte auf statische Inhalte verweisen Java Basics - Anfänger-Themen 19
M wann statische klassen? Java Basics - Anfänger-Themen 14
U statische Variablen Java Basics - Anfänger-Themen 12
F Statische Methode - Nicht Statische Methode Java Basics - Anfänger-Themen 10
S Statische Felder - statische Methoden Java Basics - Anfänger-Themen 2
D Statische und Nicht-Statische Methoden Java Basics - Anfänger-Themen 7
K Statische Methoden!? Java Basics - Anfänger-Themen 8
A Klassen Vererbung privater Methoden und Member Java Basics - Anfänger-Themen 12
W OOP Member anderer Klassen erreichen Java Basics - Anfänger-Themen 1
Luk10 Member-Variablen mit settern setzten Java Basics - Anfänger-Themen 9
S Kapselung Member korrekt nach aussen verfügbar machen Java Basics - Anfänger-Themen 6
S Object Member<T> Klasse Java Basics - Anfänger-Themen 5
S Gutes Design mit statischen oder Member-Methoden Java Basics - Anfänger-Themen 53
hdi kleine Verständnisfrage lokale + Member Variable Java Basics - Anfänger-Themen 10
A Zugriff auf Member-Variablen Java Basics - Anfänger-Themen 8
J 2 listen vergleichen, die auch null Elemente haben können ! Java Basics - Anfänger-Themen 9
frager2345 Singleton-Muster Java ->Nur eine Instanz einer Klasse erzeugen können Java Basics - Anfänger-Themen 45
M Wie können Klassen nicht-materialisierte Attribute haben, die nur über get/ set-Mehoden simuliert sind? Java Basics - Anfänger-Themen 6
C Methoden können nicht auf Instanzvariable der Klasse zugreifen Java Basics - Anfänger-Themen 3
B Warum können super() und this() nicht gemeinsam in einem Konstruktor verwendet werden? Java Basics - Anfänger-Themen 7
D Können if Anweisungen aufeinander aufbauen? Java Basics - Anfänger-Themen 1
Elaurin Erste Schritte effektiv lernen mit Java umgehen zu können? Java Basics - Anfänger-Themen 5
N Sicherheitsnummer erstellen und verändern können Java Basics - Anfänger-Themen 1
J Hinzufügen eines Objekts in eine Liste, um später dann nochmal auf das Objekt zugreifen zu können Java Basics - Anfänger-Themen 8
JokerBlacky Klassen Klasse Queue Klasse mit Attributen anhängen und auslesen können Java Basics - Anfänger-Themen 4
R warum kann System.out.println(..) etwas, was Swing-Elemente Nicht können ? Java Basics - Anfänger-Themen 11
H Methoden können nicht verwendet werden Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben