黑马程序员技术交流社区
标题:
抽象类中的困惑
[打印本页]
作者:
joeywr
时间:
2015-8-22 11:40
标题:
抽象类中的困惑
import java.io.*;
public class ReadFromProcess
{
public static void main(String[] args)
throws IOException
{
// 运行javac命令,返回运行该命令的子进程
Process p = Runtime.getRuntime().exec("javac");
try(
// 以p进程的错误流创建BufferedReader对象
// 这个错误流对本程序是输入流,对p进程则是输出流
BufferedReader br = new BufferedReader(new
InputStreamReader(p.getErrorStream()))
)
{
String buff = null;
// 采取循环方式来读取p进程的错误输出
while ((buff = br.readLine()) != null)
{
System.out.println(buff);
}
}
}
}
上述代码中的Process是抽象类,那么getErrorStream也是个抽象方法,对p.getErroStream()感到困惑,这个抽象方法并没有得到实现,为什么代码可以正常运行?
作者:
胡述灵
时间:
2015-8-22 12:33
抽象的方法,必须要继承它的子类来操作实现。它只是抽象出这样的标准规则,本身不能实现
作者:
黄蒙
时间:
2015-8-22 16:18
在问问题前先看看API;
在这句话里Process p 代表其指向了一个对象,这个对象可以是本类对象或子类对象(多态)。右边Runtime.getRuntime().exec("javac");可以看到调用的是Runtime类的静态方法getRuntime();返回的是
一个 Runtime对象,该对象又调用了.exec方法并再返回了一个Process的对象。所以等式就成立了,左边
指向了一个本类对象,右边也返回的是一个本类对象。至于为什么右边能返回一个抽象方法的对象,可能是
匿名对象,但是这些东西的产生就不需要我们管啦。
作者:
joeywr
时间:
2015-8-23 22:43
嗯 问题在于Runtime.getRuntime().exec("javac")实际返回的是Process的实现类ProcessImpl,该类继承Process,并实现了getErrorStream方法。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2