java - 无法应对继承

标签 java

我有(一些伪代码):

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))的方法中。

在这种情况下我应该怎么做才能执行子类的方法?

enter image description here

最佳答案

如果您使用的对象是 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/

相关文章:

java - Android 中的 SAX XML 解析

java - Selenium 推特java

java - 哪个更有效: if (null == variable) or if (variable == null)?

java - 将公钥转换为可读的内容以供共享

java - Java 可变参数的接收顺序是否与它们的接收顺序相同?

java - 您如何对动态语言进行更改,并找到所有将被该更改破坏的地方?

java - "if"语句背后的逻辑是什么?使用 for 循环绘图

java - 使用哪个 Azure 存储管理 jar

java - 如何在没有xml的情况下在spring4中配置 "CommonsMultipartResolver"来上传文件

java - 我如何 gzip 一个 InputStream 并返回一个 InputStream?