tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1959
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    automatix1311 automatix1311 ist offline Mitglied Bronze
    Registriert seit
    Nov 2007
    Beiträge
    26
    Hallo!

    Ein Verständnisproblem...

    Es gibt drei Klassen: MyClass, MySubClass und MyChildClass. Dabei ist MyClass die direkte Basisklasse für die anderen zwei:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    public class MyClass {
        
        private static int counter;
        
        public static void setCounter(int counter) {
            MyClass.counter = counter;
        }
        
        public static int getCounter() {
            return counter;
        }
        
    }
    Code :
    1
    2
    3
    
    public class MySubClass extends MyClass {
        
    }
    Code :
    1
    2
    3
    
    public class MyChildClass extends MyClass {
        
    }
    D.h. alle drei Klassen haben das Attribut counter -- die Basisklasse von sich aus und die abgeleiteten erben es.

    Was ich nicht verstehe, ist, warum beim Verändern des Wertes des Attributs counter einer (egal welcher von den drei) Klasse, sich auch die Werte der counter-Attribute der restlichen zwei Klassen ändern.

    Code :
    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
    28
    29
    
    public class Main {
        
        public static void main (String[] args) {
            
            MyClass myClass = new MyClass();
            MySubClass mySub = new MySubClass();
            MyChildClass myChild = new MyChildClass();
            
            myClass.setCounter(123);
            
            System.out.println("MyClass.counter = " + MyClass.getCounter());
            System.out.println("MySubClass.counter = " + MySubClass.getCounter());
            System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
            
            MySubClass.setCounter(456);
            
            System.out.println("MyClass.counter = " + MyClass.getCounter());
            System.out.println("MySubClass.counter = " + MySubClass.getCounter());
            System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
            
            MyChildClass.setCounter(789);
            
            System.out.println("MyClass.counter = " + MyClass.getCounter());
            System.out.println("MySubClass.counter = " + MySubClass.getCounter());
            System.out.println("MyChildClass.counter = " + MyChildClass.getCounter());
            
        }
     
    }
    MyClass.counter = 123
    MySubClass.counter = 123
    MyChildClass.counter = 123
    MyClass.counter = 456
    MySubClass.counter = 456
    MyChildClass.counter = 456
    MyClass.counter = 789
    MySubClass.counter = 789
    MyChildClass.counter = 789
    Kann jemand sagen, warum alle drei Attribute nicht dasgleiche, sondern dasselbe referenzieren?

    Danke.
     

  2. #2
    automatix1311 automatix1311 ist offline Mitglied Bronze
    Registriert seit
    Nov 2007
    Beiträge
    26
    Mein Fehler...

    MyClass.counter = counter;
     

  3. #3
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    Hallo, ich muss ehrlich gestehen ich hab es noch nie gebraucht und mir noch nie Gedanken darüber gemacht, aber ich dachte immer dass ein private static Attribut in den Unterklassen das selbe ist und nicht das gleiche?
     
    There are 10 kind of people, those who understand binary and those who don't.

  4. #4
    automatix1311 automatix1311 ist offline Mitglied Bronze
    Registriert seit
    Nov 2007
    Beiträge
    26
    Das weiß ich zwar nicht genau, aber dann müsste es doch bei der Definition des gleichnamigen Attributs in den abgeleiteten Klassen zu einem Namenskonflikt kommen, was nicht der Fall ist...
     

  5. #5
    Avatar von DosCoder
    DosCoder DosCoder ist offline Mitglied Gold
    Registriert seit
    Sep 2008
    Ort
    Kreis Würzburg(Bayern)
    Beiträge
    228
    Hi,
    static-Attribute und Methoden sind immer aufrufbar, also auch ohne Instanz:
    Code java:
    1
    2
    3
    4
    
    de.test.MyClass.setCounter(wert);
    de.test.MyClass.getCounter; // Ausgabe = wert
    //Vergleiche mit:
    java.lang.Math.round(1.01) //Die Methode round() der Klasse Math kannst du ohne Instanz der Klasse Maths aufrufen, weil sie mit static deklariert wird
    Wenn du diese Klasse nur vererben willst, und auf jeden Fall eine Instanz haben willst, dann lasse doch static einfach weg.
    Ciao
    DosCoder
     
    Man kann mich für das verantwortlich machen, was ich hier schreibe, nicht für das, was andere verstehen.

    Sollte ich mal Mist labern weist mich bitte darauf hin.

    Ich freue mich über ein Danke, wenn ich helfen konnte!

Ähnliche Themen

  1. Statische Attribute in typedef struct
    Von Jacal im Forum C/C++
    Antworten: 15
    Letzter Beitrag: 19.02.09, 18:27
  2. Pfadangaben von Dateien und Zugriff darauf
    Von Cortadillo im Forum Java Grundlagen
    Antworten: 11
    Letzter Beitrag: 16.10.08, 17:39
  3. Zugriff auf statische Member über Instanz
    Von Danielku15 im Forum .NET Café
    Antworten: 4
    Letzter Beitrag: 18.10.07, 21:23
  4. [VB.Net] Dynamisch erstellte Controls und der Zugriff darauf
    Von Xervek im Forum .NET Windows Forms
    Antworten: 12
    Letzter Beitrag: 07.10.07, 09:25
  5. Antworten: 5
    Letzter Beitrag: 02.05.04, 21:02