public abstract class Event implements Runnable {
public void run() {
try {
Thread.sleep(delayTime);
action();
} catch(Exception e) {e.printStackTrace();}
}
}
我上面有这个事件类,当我尝试启动线程时,它运行线程的第一个命令 - Thread.sleep(delayTime);由于Event类是抽象的,我想运行它的一些子类方法。例如,当我调用action();它应该从下面的子类
运行action方法public class ThermostatNight extends Event {
public ThermostatNight(long delayTime) {
super(delayTime);
}
public void action() {
System.out.println(this);
thermostat = "Night";
}
public String toString() {return "Thermostat on night setting";}
}
有许多这样的儿童课程,如ThermostatDay,FanOn,FanOff,他们与上述非常相似。我应该怎么做呼叫动作();从事件类中的run()命令调用sleep后?
有什么想法吗?
感谢您的帮助!
答案 0 :(得分:0)
创建Event类型的实例变量和一个接收的构造函数 事件作为参数
public class Event implements Serializable, Runnable {
private Event childClass;
public Event(long delayTime, Event childClass) {
this.delayTime = delayTime;
this.childClass = childClass;
}
public void run() {
try {
Thread.sleep(delayTime);
childClass.action();
} catch(Exception e) {e.printStackTrace();}
}
}
答案 1 :(得分:0)
我在这里意识到了这个问题。
您可以在下面的try {}中看到action():
public void run() {
try {
Thread.sleep(delayTime);
action();
} catch(Exception e) {e.printStackTrace();}
}
如果你把它推出如下,代码应该可以正常工作。
public void run() {
try {
Thread.sleep(delayTime);
} catch(Exception e) {e.printStackTrace();}
action();
}