gpt4 book ai didi

java - 说我正在覆盖 final方法,但我找不到 final方法

转载 作者:行者123 更新时间:2023-12-01 16:51:47 24 4
gpt4 key购买 nike

我正在尝试在 Java 上实现观察者模式。它不会编译,因为 notifyAll() 似乎是这里的问题;无法覆盖 Object 的 final方法,但我没有在代码中放置任何“final”或“static”。我在这里做错了什么?

import java.util.ArrayList;
import java.util.List;

interface Observer {
void update();
}

interface Subject {
void registerObserver(Observer o);
void deregisterObserver(Observer o);
void notifyAll();
}

// Concrete Class
class User implements Observer {
@Override
public void update() {
System.out.println("Donald Trump just tweeted, you know");
}
}

// Concrete Class
class realDonaldTrump implements Subject {
private boolean hasTweeted = false;
private ArrayList<Observer> followers = new ArrayList<Observer>();

public boolean hasTweetedIn24Hours() {
return hasTweeted;
}

public void donaldTweets(boolean hasTweeted) {
this.hasTweeted = hasTweeted;
notifyAll();
}


@Override
public void registerObserver(Observer o) {
followers.add(o);
}

@Override
public void deregisterObserver(Observer o) {
followers.remove(o);
}

@Override
public void notifyAll() {
for (Observer o: followers)
o.update();
}

}

public class ObserverPatternDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello World");
System.out.println("Observer Pattern Demo");
realDonaldTrump tweeterAcc = new realDonaldTrump();

}

}

最佳答案

默认情况下,所有类都扩展 Object 类,该类具有名为 notifyAll()final 方法。由于该方法是final,因此无法在您的类中重写它。

 public final native void notifyAll(); // in Object class

关于java - 说我正在覆盖 final方法,但我找不到 final方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38844761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com