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
方法时,您可以看到它确切地知道该做什么!
声明此方法后?
答案 0 :(得分:2)
Process是一个抽象类,但是从Runtime.getRuntime().exec("notepad.exe")
获得的是Process的具体子类的实例。在这个具体的子类中,有一个抽象destroy()
方法的实现。
您不需要知道返回哪个具体子类。重要的是它是一个过程。有可能Windows上使用的具体子类与MacOS或Linux上使用的子类不同。但它们都是Process的子类。那就是多态性是什么。
答案 1 :(得分:0)
“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); }