小智 39
为什么人们认为有人想要实例化界面?
我们想要做的是强制实现者实现构造函数,就像其他接口方法一样.
界面就像合同.假设我有一个接口Queue,我想确保实现者创建一个带有一个参数的构造函数,它创建一个单例队列(一个只有该元素的新队列).为什么不应该成为合同的一部分?至少使用Java接口,无法指定.
Jar*_*Par 12
他们不好,因为他们没有任何目的.从本质上讲,接口只是一个数据传递合同.没有任何实现附加接口,因此没有任何内容可以初始化,也不需要构造函数.
如果你需要某种初始化,你最好使用抽象类.
首先,我不同意接口只是一个数据传递合同.如果这是真的,您将被允许在界面中定义属性.
我不会认为这样做很奇怪:
interface IDBConnection
{
function __construct( $connectionString );
function executeNonQuery( $commandText, $paramters=null);
function executeScalar( $commandText, $paramters=null);
function executeSingle( $commandText, $paramters=null);
function executeArray( $commandText, $paramters=null);
}
Run Code Online (Sandbox Code Playgroud)
这将使您能够基于简单反射而不仅仅是数据协定来创建用于数据访问的第三方类的实例.
我很确定这不是最好的例子,我会在现实世界中找到一个抽象基类,但我也非常确定有完全正确的理由来定义构造函数方法的合同.一个我没想过的界面.
我没有看到它完成,但我不认为它是奇怪或坏.
无论它们是否不好,我不知道有任何语言能够在接口上指定构造函数。
然而,话虽这么说,我个人并不认为对象的构造函数是该对象接口的一部分,因此向接口添加构造函数会抑制接口提供的自然灵活性。