无法理解需要使Process.java抽象化

时间:2013-04-22 15:34:52

标签: java design-patterns

我随便走过Java核心类的源代码。我发现Process.java文件是public abstract类。当我通过代码没有功能有定义。这是否意味着它应该被声明为Interface。背后是否有任何故意的理由。有人可以帮助我了解这种设计的需要。

链接到code

4 个答案:

答案 0 :(得分:3)

Process是抽象的,因为它可能在每个操作系统上都有不同的实现。应用程序开发人员不实现这个抽象类;它是作为Java运行时的一部分实现的。

由于所有方法都是抽象的,因此可以将其声明为接口,但这会使类在将来无法进化。例如,一旦在公共API中声明了接口,就不应该将新方法添加到接口,因为任何现有的实现都是不兼容的。相反,可以轻松地将新的(具体)方法添加到抽象类中。

Process的实例由运行时创建,可以通过Runtime类方法,也可以从ProcessBuilder实例创建。应用程序通常不会使用new运算符直接创建实例(具体子类)。

答案 1 :(得分:2)

我怀疑这种关键差异源于这样一个事实,即你可以implement尽可能多interface个,但你只能extend 一个 {{ 1}},无论是抽象的还是其他的。

使class摘要因此确保如果您实际决定从头创建一个(即不是从系统提供的工厂,这是正常的路由),您将无法将功能放在父类中它的。这有什么帮助我不确定。

也许这是一个安全问题,因为进程应该由操作系统创建和拥有。它最好是阻止你自己制作它们。

<强>加

内心深处我认为它不是界面的原因是历史性的。请记住Process已经在Process中,因为年份有点,然后接口就是你实现的东西,而不是对象个性方面的定义。这个概念在很晚的时候长大了。

请注意,自JDK 1.0以来java.lang已经存在,而许多更有用的接口在很晚之后到达,例如Process接口直到JDK 1.4才出现。我认为,从主要对象和接口真正有用的范式转变为对象只是实现的全部和结束。

CharSequence因此是Process真实对象时创建的类之一,可能是开车的奥迪Quattro,不是一些模糊的概念性namby-pamby miasmic的东西,它有一些方法,看起来有点像这样。

答案 2 :(得分:1)

Process显然具有我们无法看到的内部功能,这显然必须依赖于操作系统。

我的猜测是,他们不希望您实现自己的符合API的类,这些类不继承Java库定义的Process类的隐藏功能。

答案 3 :(得分:0)

根据java.lang.Process的文档,该类提供了一个可以不带参数调用的构造函数。接口无法做到这一点。