Verständnis von "final" und "static"

Timmorn

Mitglied
Hallo,

ich habe da echt ein Verständnisproblem, das ich auch mit nachlesen (etwa in der Java Insel) nicht ganz beseitigen konnte.

Erstmal bin ich schon des öfteren auf die Meldung "overrideable method call in constructor" von Netbeans gestoßen. Warum diese Meldung kommt, konnte ich mit nachlesen klären: Es kann Probleme mit einer Subclass geben. Ein Bsp für diese Warunung:

Code:
public class SayIt {
    private static String Ausgabe;
    public SayIt (){
        setAusgabe("Der default Wert");
    }

    public String getAusgabe() {
        return Ausgabe;
    }

    public void setAusgabe(String out) {
        Ausgabe = out;
    }
}

Was aber nun der beste Weg ist das zu lösen, das checke ich noch nicht ganz. Ein final vor setAusgabe beseitigt ihn mal schnell. Aber ich verstehe nicht, ob das der richtige Weg ist, diesen Fehler zu vermeiden. Sollte ich vielleicht meine Klasse überhaupt anders angehen in so einem Fall?

Generell möchte ich eben, dass bei einer Klasse, bei Initialisierung bestimmte Funktionen das erste Mal ausgeführt werden (wie im Bsp oben), um so zusagen einen default Zustand zu haben. Und da scheint mir eben logisch, dies über den Constructor zu machen. Dann müsste ich aber all die verwendeten Funktionen auf final setzen?

Danke für die Hilfe,
Wolfgang
 

XHelp

Top Contributor
Dazu läuft übrigens gerade im anderen Thread eine Diskussion ("immer getter/setter" o.ä.)
Man könnte ja von deiner Klasse ableiten und setAusgabe überschreiben. Dann würde der Konstruktor gänzlich etwas anderes machen.
P.S. bist du sicher, dass "ausgabe" static sein muss? Und Variablen sollte man klein schreiben
 

KrokoDiehl

Top Contributor
Die Meldung sagt nur "das was du in einem Konstruktor aufrufst, kann von einer Subklasse überschrieben werden". Folgendes Beispiel:
Java:
class Oberklasse
{
    protected String name;
    
    public Oberklasse( String name )
    {
        setName(name);
    }    

    public void setName(String name)
    {
        this.name = name;
    }
}

class Unterklasse extends Oberklasse
{
    public Unterklasse(String name)
    {
        super(name);
    }

    @Override
    public void setName(String name)
    {
        this.name = "Ausgetrickst!";
    }
}
Dadurch dass die Methode
Code:
setName(String)
nicht final ist, kann man sie in Subklassen überschreiben. Hier überschreibt Unterklasse diese Methode und macht etwas völlig anderes, als erwartet: Sie setzt nicht den übergebenen Parameter als name! Daher:
Java:
Unterklasse unter = new Unterklasse("Max Muster");
// ...nun würde man erwarten, dass der Name "Max Muster" lautet, tatsächlich
// aber ist er "Ausgetrickst!"
Deswegen wird dies als Warnung behandelt. Es ist kein Programmfehler, aber womöglich eine Designschwäche ( ...zum Thema Setter gibts hier ohnehin schon genug Streitthemen :bae:).

Das Wörtchen "final" behebt das Problem, weil final-Methoden nicht überschrieben werden dürfen.

*edit*
Ja, da fehlte ein "k" ... :)
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Erstmal bin ich schon des öfteren auf die Meldung "overrideable method call in constructor" von Netbeans gestoßen.
...
Was aber nun der beste Weg ist das zu lösen, das checke ich noch nicht ganz. Ein final vor setAusgabe beseitigt ihn mal schnell. Aber ich verstehe nicht, ob das der richtige Weg ist, diesen Fehler zu vermeiden.
Hab keine Ahnung von Netbeans aber die Meldung sagt ja nichts anderes, dass Du im Konstruktor eine Methode verwendest die (von Subklassen) überschrieben werden könnte.

Das final bewirkt, dass die Methode nicht mehr überschrieben werden kann, wenn es das ist was Du willst kann man das so machen.
Man kann aber auch die Variablen im Konstruktor direkt initialisieren.

Ansonsten: soll Ausgabe wirklich static sein? Alle Objekte dieser Klasse verwenden die selbe Variable!
 
B

bygones

Gast
ein einfache Regel:

Wenn deine Klasse nicht beim Erstellen für Vererbung gedacht ist, mach die Klasse final.

Nur wenn (und wirklich nur wenn), wenn die Klasse wirklich für die Vererbung frei gegeben ist, dann nicht final und keine Methoden im Konstruktor aufrufen - ansonsten Klassen immer final
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
N Verständnis Frage zu Variablen Java Basics - Anfänger-Themen 3
KogoroMori21 Polymorphie-Verständnis Java Basics - Anfänger-Themen 5
S Verständnis-Frage zu einer HÜ? Java Basics - Anfänger-Themen 1
NeoLexx equals()-Methode Verständnis Frage anhand Code Beispiel Java Basics - Anfänger-Themen 22
B Frage zum Code verständnis im Resultat Java Basics - Anfänger-Themen 10
T Methoden Verständnis Java Basics - Anfänger-Themen 14
M Java Code Verständnis Java Basics - Anfänger-Themen 4
M Java Code Verständnis Java Basics - Anfänger-Themen 2
M Fehlendes Verständnis für dynamische Bindung und Vererbung Java Basics - Anfänger-Themen 13
K nur für das verständnis Java Basics - Anfänger-Themen 3
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
S Verständnis Vererbung Java Basics - Anfänger-Themen 3
J Code Verständnis Java Basics - Anfänger-Themen 9
B Problem beim grundsätzlichen Verständnis bei Rekursion mit 2-dimensionalen Array Java Basics - Anfänger-Themen 6
Y MVC MouseEvent Verständnis Java Basics - Anfänger-Themen 24
W Verständnis Probleme bei der while-Schleife und continue Java Basics - Anfänger-Themen 21
M If Verständnis Problem Java Basics - Anfänger-Themen 2
J Verständnis Problem Java-Listener. Java Basics - Anfänger-Themen 59
D Hilfe bei Verständnis von Aufgabe Java Basics - Anfänger-Themen 1
I Verständnis Frage wegen einer Aufgabe Java Basics - Anfänger-Themen 10
P verständnis Frage Refernzen und Objekte Java Basics - Anfänger-Themen 1
S Verständnis - Frage mehrere SQL Statements in While Schleife Java Basics - Anfänger-Themen 0
J java syntax verständnis Java Basics - Anfänger-Themen 6
M Verständnis von Deadlocks Java Basics - Anfänger-Themen 2
C Klassen/Objekte Verständnis Java Basics - Anfänger-Themen 8
O Singleton Verständnis Java Basics - Anfänger-Themen 4
C Allgemeines Verständnis For-Schleife Java Basics - Anfänger-Themen 3
vodkaz For Schleife Verständnis Problem Java Basics - Anfänger-Themen 4
R Input/Output MVC - Frage zum Verständnis Java Basics - Anfänger-Themen 5
G regex Verständnis Problem Java Basics - Anfänger-Themen 3
B Hilfe beim Verständnis zu Generics Java Basics - Anfänger-Themen 7
J Musterlösung Verständnis Frage zu Math.abs() Java Basics - Anfänger-Themen 5
R RandomAccessFile verständnis Problem Java Basics - Anfänger-Themen 10
M Erste Schritte Verständnis Problem Konstruktoren Java Basics - Anfänger-Themen 13
X Kompilat verständnis Frage Java Basics - Anfänger-Themen 9
C Input/Output Anfänger Array-Verständnis Frage Java Basics - Anfänger-Themen 7
H Überladen Verständnis Java Basics - Anfänger-Themen 3
J Compiler-Fehler Verständnis Problem bei Compiler-Warning Java Basics - Anfänger-Themen 7
E Verständnis zu einem Rekursionsbeispiel Java Basics - Anfänger-Themen 12
F Verständnis Frage - && Java Basics - Anfänger-Themen 2
S Timer / Schleifen Verständnis Problem Java Basics - Anfänger-Themen 3
O Frage zu Verständnis von Collection Java Basics - Anfänger-Themen 4
JavaKaffee Minimax-Algorithmus Verständnis Java Basics - Anfänger-Themen 12
C Methoden Frage zu Verständnis eines Beispiels Java Basics - Anfänger-Themen 3
M Polymorphie Cast:Verständnis und Ausführung Java Basics - Anfänger-Themen 10
M Verständnis Frage Java Basics - Anfänger-Themen 11
M Verständnis-Probleme mit eigenen Klassen Java Basics - Anfänger-Themen 2
U ADT verständnis Problem Java Basics - Anfänger-Themen 18
S Java Verständnis Problem Methoden etc. Java Basics - Anfänger-Themen 22
F ArrayList() Verständnis Java Basics - Anfänger-Themen 14
M Verständnis von PrintWriter Java Basics - Anfänger-Themen 12
M Verständnis einiger Zeilen Java Basics - Anfänger-Themen 4
P Codeschnipsel Verständnis Problem (Array) Java Basics - Anfänger-Themen 6
F Groovy Verständnis ConfigSlurper Java Basics - Anfänger-Themen 7
H Verständnis Strategy Pattern Java Basics - Anfänger-Themen 4
A Dringende Bitte um Erklärungen zum besseren Verständnis Java Basics - Anfänger-Themen 4
J Verständnis Problem mit return --> Klausuraufgabe Java Basics - Anfänger-Themen 4
deimosmuc Hilfe zum Verständnis bei Vererbung Java Basics - Anfänger-Themen 11
T Verständnis-Frage Java Basics - Anfänger-Themen 2
F (Verständnis)Problem: Zahl auf 2 Nachkommastellen runden Java Basics - Anfänger-Themen 5
E Verständnis frage zum return wert eines Arrays Java Basics - Anfänger-Themen 7
S Frage zu Verständnis und Logik Java Basics - Anfänger-Themen 5
P Verständnis bzgl. MVC Java Basics - Anfänger-Themen 11
M Klassen und Objekte => richtiges Verständnis? Java Basics - Anfänger-Themen 6
B Exception verständnis Problem Java Basics - Anfänger-Themen 2
V KSKB zum Verständnis von Graphics und paintComponent Java Basics - Anfänger-Themen 6
A Array Verständnis Frage Java Basics - Anfänger-Themen 4
L Hashtable Verständnis Frage Java Basics - Anfänger-Themen 4
M Verständnis-Problem Java Basics - Anfänger-Themen 4
H Verständnis: Methode Java Basics - Anfänger-Themen 2
Z Verständnis Java Basics - Anfänger-Themen 4
R Verständnis Java Basics - Anfänger-Themen 4
R Verständnis bei Listen Java Basics - Anfänger-Themen 2
R Verständnis Klassen Java Basics - Anfänger-Themen 9
C Setter-Methode mit final-Attribut Java Basics - Anfänger-Themen 9
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
J final attribute erben Java Basics - Anfänger-Themen 2
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
A final String verrechnen Java Basics - Anfänger-Themen 2
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
A Variablen zum final verändern Java Basics - Anfänger-Themen 4
D Interface Final für Parameter in überschriebenen Methoden? Java Basics - Anfänger-Themen 3
E Sinn: final in Parameterliste verwenden Java Basics - Anfänger-Themen 2
M Iterator cannot refer to a non final... Java Basics - Anfänger-Themen 20
shiroX Klassen Klasse/Methode private final jUnit-Fehler Java Basics - Anfänger-Themen 5
D Kapselung final Variablen mit Getter? Java Basics - Anfänger-Themen 2
R JTextArea final Status ändern Java Basics - Anfänger-Themen 11
F Static final Klasse Java Basics - Anfänger-Themen 0
S Kopierkonstrukter eines Objekts mit final Attributen Java Basics - Anfänger-Themen 6
T Schlüsselworte final Java Basics - Anfänger-Themen 1
M Wann final verwenden? Java Basics - Anfänger-Themen 5
F Methoden Cannot refer to a non-final variable.. verständnisproblem. Java Basics - Anfänger-Themen 7
C Klassen Minesweeper Problem. int needs to be final (inner class problem) Java Basics - Anfänger-Themen 3
R Variablen final String Variable als Attribut veränderbar? Java Basics - Anfänger-Themen 21
U final Instanz Java Basics - Anfänger-Themen 11
W run Methode in Time erzwingt final Java Basics - Anfänger-Themen 3
D Polymorphie final class Java Basics - Anfänger-Themen 2
C Erste Schritte felder, die public final sind Java Basics - Anfänger-Themen 6
H static final vs. final static Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben