我有(一些伪代码):
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 类(在“变量”小节中可见)。因此,我来到图片中的上断点,按 Step into,然后出现在下断点处。我的意思是我出现在Thrd类(父类(super class))的方法中。
在这种情况下我应该怎么做才能执行子类的方法?
最佳答案
如果您使用的对象是 FreeThread 的实例,则调用 object.letUsFinalise() 将调用 FreeThread 中的方法。
看起来您是从父类(super class)调用 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 的静态对象并使用它来调用该方法,如上所示。
关于java - 无法应对继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22582128/