Vererbung von Hashtables

Status
Nicht offen für weitere Antworten.

meladamo

Mitglied
Hallo Leute,

ich habe eine Klasse Message und zwei weitere Klassen (MsgLogin und MsgData) definiert, die die Klasse Message erweitern sollen. Da diese abgeleiteten Klassen auf gemeinsame Daten zugreifen, habe ich in der Klasse Message eine Hashtable angelegt. Wenn ich in der Klasse MsgLogin in dieser Hashtable Daten ablege, so sind diese Daten in MsgData nicht sichtbar bzw. garnicht vorhanden. Denn wenn ich in MsgData mit der Methode isEmpty() abfrage, ob die Hashtabelle leer ist, so bekomme ich true zurück. Ich vermute, dass das ein Problem mit der Vererbung ist oder liege falsch und wie schaffe ich, dass die Daten auch in MsgData vorhanden sind?

Danke und viele Grüße!
 

KSG9|sebastian

Top Contributor
hae? :
poste mal bitte den code von deinen klassen.
allgemein gilt

class msg

class a extends msg
class b extends msg
class c extends msg

Attribute die in der Klasse msg als "protected" deklariert sind sine in den unterklassen a, b und c sichtbar.

Das Problem dass du hast liegt daran, dass zwar alle 3 unterklassen die HashTable haben, aber nicht die selbe Instanz. D.h. wenn du in der Klasse A was in die HashTable schreibst, dann ist es bei Klasse B und C in der HashTable nicht vorhanden.

Du konntest die HashTable static deklarieren und dann mit
Message.put() bzw. Message.isEmpty() drauf zugreifen, dass müsste gehen!
 

meladamo

Mitglied
Wie du gesagt hast, mag es wohl daran liegen, dass die Unterklassen nicht dieselbe Instanz der Hashtable besitzen.

Du konntest die HashTable static deklarieren und dann mit
Message.put() bzw. Message.isEmpty() drauf zugreifen, dass müsste gehen!

Das klappt auch nicht. Ich habe sogar zwei Methoden, getHashtable() und setHashtable(Hashtable hashTable), implementiert und versucht, damit auf die Hashtable zuzugreifen, aber das hat auch nicht geklappt. Jetzt habe ich die Hashtable in eine andere Klasse verlagert und das klappt natürlich. Mich würde aber interessieren, wie die Unterklassen eine Variable der Oberklasse manipulieren können. Unten ist etwas Code zu meinem Problem.

Code:
public class Message {
    protected Hashtable datenFelder;    

     public Message(){
        datenFelder = new Hashtable();
    }
}


Code:
public class MsgLogin extends Message{

       ..........................

 private void run(){
        String sNutzdaten;
        StringTokenizer loginConfirm;
        
        //Daten, die nach einem Trenzeichen T1 zerlegt werden 
        sNutzdaten = ".....";
        loginConfirm = new StringTokenizer(sNutzdaten, T1);
        
        String token1 = loginConfirm.nextToken();
        String token2 = loginConfirm.nextToken();
                
        datenFelder.put("kundenID", token1);
        datenFelder.put("agentenID", token2);
    }
        
}

Code:
public class MsgData extends Message{

    ....................................
    //Wenn diese Methode aufgerufen wird, gibt es eine NullPointerException, da sMessage "null" ist.
    //In sMessage sollte aber die AgentenID stehen, wie man oben sehen kann.
    public void sendToProxy(){
        String sMessage;
        
        sMessage = (String)netTransport.datenFelder.get("agentenID");
        this.netTransport.sendMessage(MSG_GETSTATE, sMessage);
    }

}

Edit by Dotlens: Code Tags eingefügt
 

KSG9|sebastian

Top Contributor
Code:
public class Message { 
    public static Hashtable datenFelder;    

    public Message(){ 
        datenFelder = new Hashtable(); 
    } 
}

Code:
public class MsgLogin extends Message{ 

       .......................... 

private void run(){ 
        String sNutzdaten; 
        StringTokenizer loginConfirm; 
        
        //Daten, die nach einem Trenzeichen T1 zerlegt werden 
        sNutzdaten = "....."; 
        loginConfirm = new StringTokenizer(sNutzdaten, T1); 
        
        String token1 = loginConfirm.nextToken(); 
        String token2 = loginConfirm.nextToken(); 
                
        Message.datenFelder.put("kundenID", token1); 
        Message.datenFelder.put("agentenID", token2); 
    } 
        
}

Code:
public class MsgData extends Message{ 

    .................................... 
    //Wenn diese Methode aufgerufen wird, gibt es eine NullPointerException, da sMessage "null" ist. 
    //In sMessage sollte aber die AgentenID stehen, wie man oben sehen kann. 
    public void sendToProxy(){ 
        String sMessage; 
        
        sMessage = (String)Message.datenFelder.get("agentenID"); 
        this.netTransport.sendMessage(MSG_GETSTATE, sMessage); 
    } 

}


In der Klasse Message das Attribut "HashMap datenFelder" static deklarieren -> "public static HashMap datenFelder"
Dann musst du die 2 anderen Klassen noch kurz anpassen oder du kopierst dir meinen Code. Das müsste eigentlich gehen..
 

Bleiglanz

Gesperrter Benutzer
Wenn ich in der Klasse MsgLogin in dieser Hashtable Daten ablege, so sind diese Daten in MsgData
nicht sichtbar bzw. garnicht vorhanden
kein Wunder, deine ganze Idee ist ziemlicher Quatsch:

wenn

X extends Super
Y extends Super

und dann

X x = new X();
Y y = new Y();

dann wird für x und y jeweils ein EIGENES "anonymes" Superklassenobjekt erzeugt!!!

Wwas du willst geht nur mit static, oder z.B. Dependency Injection

X x = new X(common)
Y y = new Y(common)

also ohne Vererbung, im konstruktor das "geteilte" Objekt übergeben
 

KSG9|sebastian

Top Contributor
ach ja, bei deinem beispiel ist vererbung eh nicht so glücklich

Vererbung wird verwendet wenn gilt

unterklasse ist eine oberklasse

Bsp:

Mensch ist ein Lebewesen (class Mensch extends Lebewesen)
oder
PKW ist ein Auto
Hund ist ein Tier

u.s.w.

aber bei dir

MsgData (ich nehm mal an MessageDate)

MessageData ist eine Message

und das stimmt eben nicht

MessageLogin ist eine Message

stimmt auch nicht
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
A Vererbung Selbstreferenzparameter Allgemeine Java-Themen 14
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
S MVC - Vererbung Allgemeine Java-Themen 4
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
C dynamische Vererbung Allgemeine Java-Themen 6
L Zwei Hashtables statt einer? Allgemeine Java-Themen 6
U Hashtables und hashCode() Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben