PropertyChangeListener Vererbung

ArnoldS

Mitglied
Hallo,
ich habe ein Problem mit Listener und Vererbung. Ich habe eine abstrakte Klasse mit Eigenschaften und PropertyChangeSupport. hier ein Ausschnitt
Java:
public abstract class Resource {
 private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
...
 public void setHours(float hours) {
        float oldHours = this.hours;
        this.hours = hours;
        propertyChangeSupport.firePropertyChange("hours", oldHours, hours);
    }
}
Ich habe nun eine weiter Klasse, die von dieser erbt
Java:
public class WorkWorker extends Resource implements Serializable {
       private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);
....
 public void setCostHour(float costHour) {
        float oldCostHour = this.costHour;
        this.costHour = costHour;
        propertyChangeSupport.firePropertyChange("costHour", oldCostHour, costHour);
        }
/**
     * Add PropertyChangeListener.
     *
     * @param listener
     */
    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
            
    }

    /**
     * Remove PropertyChangeListener.
     *
     * @param listener
     */
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
Leider wird nun scheinbar die firePropertyChange der abstrakten Klasse nicht aufgerufen, sondern nur jene von der abgeleiteten Klasse. Wenn ich die Methode addPropertyChange nur in der Basisklasse einfüge, dann ist es halt genau umgekehrt. Falls ich sie bei beiden einfüge dann ist es das gleiche, als wenn ich sie nur in der abgeleiteten Klasse einfüge.
Wie kann ich es bewerkstelligen, dass ich in der WorkWorkerKlasse die firePropertyChange Ereignisse der Basisklasse verwalten kann.

danke
Arnold
PS: ich bin neu in Java und deshalb ist mir dies mit PropertChange noch nicht ganz klar
 

ArnoldS

Mitglied
Habe nun in der abstrakten Klasse den Listener hinzugefügt:
Java:
...
 public void addPropertyChangeListenerSuper(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);

    }

 public void removePropertyChangeListenerSuper(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
in der abgeleiteten Klasse, rufe ich einfach die Methode der superklasse auf:
Java:
 public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
       // calling the also the listener of the superclass
        super.addPropertyChangeListenerSuper(listener);
    }

    
    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
        // calling the also the listener of the superclass
         super.removePropertyChangeListenerSuper(listener);
    }
Zwar funktioniert es nun, aber ob dieser Lösungansatz der richtige ist? Scheint mir leider nicht so. Gibt es nicht eine ellegantere Lösung?
Ich meine:
nur in der abgeleiteten Klasse den Listener implementieren und auch bei Änderungen von Eigenschaften in der abstrakten Klasse ein firePropertyChange auslösen ?

danke
 

andiv

Bekanntes Mitglied
Würde nicht sowas gehen?

Java:
public class Base {
    protected PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this);

    public void addPropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.addPropertyChangeListener(listener);
    }

    public void removePropertyChangeListener(PropertyChangeListener listener) {
        propertyChangeSupport.removePropertyChangeListener(listener);
    }
}

public class Derived extends Base {
    public void setData(String data) {
        String oldData = this.data;
        this.data = data;
        propertyChangeSupport.firePropertyChange("data", oldData, data);
    }
}
 

tagedieb

Top Contributor
Du solltest die PropertyChangeSupport instanz in deiner Basisklasse auf 'protected' setzten und aus der Subklassen loeschen.
Ansonsten hast du 2 verschiedene Instanzen mit demselben namen!
 

ArnoldS

Mitglied
ok, danke für die Hilfe, werde es so testen, so sollte es dann auch funktionieren!
Ich habe halt immer gedacht man sollte mit protected oder auch publich sehr vorsichtig umgehen. Ich wollte die Sichtbarkeit der Variablen nicht erweitern. Wenn das aber so usus ist, dann bin ich schon erleichtert und nochmals Danke, endlich komme ich weiter!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
M MVC: PropertyChangeListener vs Java Observer & Observable Allgemeine Java-Themen 11
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
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
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
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben