Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使子类在java中可见_Java_Observer Pattern - Fatal编程技术网

使子类在java中可见

使子类在java中可见,java,observer-pattern,Java,Observer Pattern,我有一个子类叫做Passenger,它是从Person类扩展而来的。我想让乘客舱成为一个可观察的物体。所以我是这样做的 class Person extends Observable{ } class Passenger extends Person{ public void move(){ setChanged(); notifyObservers(); } } class Manager implements Observer

我有一个子类叫做Passenger,它是从Person类扩展而来的。我想让乘客舱成为一个可观察的物体。所以我是这样做的

class Person extends Observable{    
}

class Passenger extends Person{
    public void move(){
        setChanged();
        notifyObservers();
    }   
}

class Manager implements Observer{
    @Override
    public void update(Observable o, Object arg) {
    }  
}

当我不需要Person类的可观察功能时,让Person类可观察是一种不好的做法吗?如果是这样的话,我该如何改变这一点呢?

我认为java中的Obervable类是一个考虑不周的类。在我看来,它真的很想在界面上

然而,你可以在乘客层面上使用构图,而不是让人从可观察的角度进行延伸

在乘客舱内,您可以使用以下代码:

private Observable observable = new Observable();

public void addObserver(Observer o) {
    observable.addObserver(o);
}

public void notifyObservers() {
    observable.notifyObservers();
}
这是与可观察对象的组合关系。它应该工作得很好

有关此问题的更多信息:


您还可以将Person类作为一个接口,以便乘客类可以扩展Observable并实现Person。只是想一想。

如果您需要将乘客从人扩展到人,那么您没有其他方法可以实现您正在做的事情;)如果你想“使乘客等级成为可观察的对象”,为什么不让
乘客
扩展
可观察
呢?因为它需要扩展personI同意TangledUpInBlue(回答如下)。给人一个界面似乎是合理的。然后您可以创建两个抽象类;BasePerson和BaseObservicePerson根据需要进行扩展。