什么时候声明了destroy()?

时间:2014-08-03 15:04:33

标签: java

import java.io.IOException;

public class Main {
    public static void main(String[] args) throws IOException,
            InterruptedException {
        System.out.println("Creating Process");

        Process process = Runtime.getRuntime().exec("notepad.exe");

        System.out.println("Waiting for 3 Sec");

        Thread.sleep(3000);

        process.destroy();

        System.out.println("process Destroyed");
    }
}

据我所知Process Class是一个抽象类,它为destroy()提供了这种方法 abstract void destroy();

但是当我为destroy对象调用process方法时,您可以看到它确切地知道该做什么!

声明此方法后?

2 个答案:

答案 0 :(得分:2)

Process是一个抽象类,但是从Runtime.getRuntime().exec("notepad.exe")获得的是Process的具体子类的实例。在这个具体的子类中,有一个抽象destroy()方法的实现。

您不需要知道返回哪个具体子类。重要的是它是一个过程。有可能Windows上使用的具体子类与MacOS或Linux上使用的子类不同。但它们都是Process的子类。那就是多态性是什么。

答案 1 :(得分:0)

来自java.lang.Process

ProcessBuilder.start()Runtime.exec方法创建本机进程并返回Process 子类的实例,可用于控制进程并获取有关它的信息。“

子类的工作是定义destroy()

ProcessImpl.java我们有:

/* This class is for the exclusive use of ProcessBuilder.start() to
 * create new processes.

...

public void destroy() { terminateProcess(handle); }