我有(一些伪代码):
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类(在“变量”小节中可见)。因此,我来到图片中的最高断点,按“跳入”,然后出现在较低的断点处。我的意思是我发生在Thrd类(超类)的方法中。
我应该怎么做才能在这种情况下执行子类的方法?
最佳答案
如果您使用的对象是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静态对象,并使用该对象来调用该方法,如上所示。