我有(一些伪代码):
public class Thrd extends Thread{
protected void letUsFinalize(){
int a = 0; // Just for debugging.
}
}
public class FreeThread extends Thrd{
@Override
protected void letUsFinalize() {
FreeThread.this.interrupt();
}
}
请看看图片。我们的对象现在是FreeThread类(在Variables子部分中可见)。所以,我来到图片的上方断点,按Step into,我发生在较低的断点处。我的意思是我出现在类Thrd(超类)的方法中。
我该怎么做才能在这种情况下执行子类的方法?
答案 0 :(得分:0)
如果您使用的对象是FreeThread的实例,则调用object.letUsFinalise()将从FreeThread调用该方法。
看起来你正在从超级类调用letUsFinalise(),因此无法调用子类'方法除非您使用静态对象(如下所示)。
public class SuperClass {
public void method(){
Objects.object.method();
}
}
class SubClass extends SuperClass{
@Override
public void method(){
System.out.println("I'm the sub class!");
}
}
class Objects{
public static SubClass object = new SubClass();
}
我建议您创建一个FreeThread的静态对象,并使用它来调用该方法,如上所示。