在Java中声明对象时:
Runtime rt = Runtime.getRuntime();
Process lsProc = rt.exec("who -q");
InputStream in = lsProc.getInputStream();
为什么lsproc
没有这样声明 - > Process lsproc = new Process
?
对象lsproc
如何保存另一个函数的值?
答案 0 :(得分:2)
Process lsProc = rt.exec("who -q");
仅此一行意味着,
这意味着exec
类的方法Runtime
返回类型为IsProc
的实例Process
。
public Process exec(String[] cmdarray, String[] envp, File dir)
609 throws IOException {
610 return new ProcessBuilder(cmdarray)
611 .environment(envp)
612 .directory(dir)
613 .start();
614 }
它返回的ProcessBuilder
实例的类型为Process
,这意味着Process是一个抽象类,ProcessBuilder
是它的具体类。
现在您可能会遇到一个如何
的问题Process pro = new ProcessBuilder(..);
是有效的,可以让您了解多态性。
答案 1 :(得分:0)
因为它返回Process
。见here #exec(java.lang.String)
答案 2 :(得分:0)
方法rt.exec("who -q")
可以返回对Process
类型实例的引用。它可以通过调用new Process (..)
来创建该实例本身(或者实际上,因为Process
是一个抽象类,通过创建一个Process
的子类的实例),或者它可以检索它来自其他地方。
在Runtime.exec(String)
方法的调用链之后会导致此调用:
return new ProcessBuilder(cmdarray)
.environment(envp)
.directory(dir)
.start();
start
方法调用实际创建ProcessImpl.start
实例的Process
。