我有(一些伪代码):

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静态对象,并使用该对象来调用该方法,如上所示。

09-04 09:38