Hallo Leute!
Ich habe einige Schwierigkeiten, die wahrscheinlich mehr mit OOP allgemein, als mit Java konkret zu tun haben.
Ich möchte die Klasse HashMap auseinander nehmen, analysieren und mit der Klasse ein bisschen rumexperimentieren. D.h. manche Methoden davon verändern, Zugriffe auf bestimmte Objekte/Methoden zählen, neue Sachen hinzufügen usw.
Natürlich kann ich das nicht direkt machen und sollte z.B. eine eigene Klasse von der HashMap ableiten. Und da fangen meine Probleme an:
das Überschreiben der Methoden funktioniert nur soweit:
d.h. ich kann nur vor und nach der Ausführung der Elternmethode etwas machen, aber nicht "mittendrin"
und wenn ich einfach die alte Implementierung komplett kopiere
schimpft er, dass die im Code verwendete Methoden und Klassen "not visible" sind(natürlich, weil sie als private deklariert sind).
Was macht man damit?
Wie kann ich so eine Standardklasse verändern?
Wär dankbar für jede Antwort
Ich habe einige Schwierigkeiten, die wahrscheinlich mehr mit OOP allgemein, als mit Java konkret zu tun haben.
Ich möchte die Klasse HashMap auseinander nehmen, analysieren und mit der Klasse ein bisschen rumexperimentieren. D.h. manche Methoden davon verändern, Zugriffe auf bestimmte Objekte/Methoden zählen, neue Sachen hinzufügen usw.
Natürlich kann ich das nicht direkt machen und sollte z.B. eine eigene Klasse von der HashMap ableiten. Und da fangen meine Probleme an:
das Überschreiben der Methoden funktioniert nur soweit:
Code:
@Override
public V put(K key, V value){
return (V) super.put(key, value);
}
d.h. ich kann nur vor und nach der Ausführung der Elternmethode etwas machen, aber nicht "mittendrin"
und wenn ich einfach die alte Implementierung komplett kopiere
Code:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key);
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
Was macht man damit?
Wie kann ich so eine Standardklasse verändern?
Wär dankbar für jede Antwort
