接口中构造函数的要求

时间:2014-02-06 17:59:02

标签: java android interface constructor enums

首先,要明确的是,我知道什么是接口。

我的意思是,我是否可以要求实现接口的类具有接口中提到的构造函数?

如下:

public interface IA {
    /*constructor requirement*/
    public IA(int, int, int, int, int, int, int);
}

public class A implements IA {
    /* Because I implements IA, I have to make this contructor */
    public A(int, int, int, int, int, int, int) {
        ....
    }
}

3 个答案:

答案 0 :(得分:3)

不允许在接口中指定构造函数。这不应该被允许,因为构造函数不是继承的。如果超类具有构造函数Superclass(int, int, int),那么这不会强制子类具有构造函数Subclass(int, int, int)。因此,接口不应该强制构造函数。

JLS, Section 9.1.4,说明界面体中唯一可以存在的东西:]

  

接口的主体可以声明接口的成员,即字段(第9.3节),方法(第9.4节),类(第9.5节)和接口(第9.5节)。

InterfaceBody:
    { InterfaceMemberDeclarationsopt }

InterfaceMemberDeclarations:
    InterfaceMemberDeclaration
    InterfaceMemberDeclarations InterfaceMemberDeclaration

InterfaceMemberDeclaration:
    ConstantDeclaration
    AbstractMethodDeclaration
    ClassDeclaration 
    InterfaceDeclaration
    ;

这意味着Java特别禁止接口中的构造函数; JLS不会在可以作为接口成员的事物列表中列出构造函数。

答案 1 :(得分:0)

没有。您可以使用构建器执行类似的操作。

答案 2 :(得分:0)

在最常见的形式中,接口是一组具有空体的相关方法。自行车的行为(如果指定为界面)可能如下所示:

interface Bicycle {

    //  wheel revolutions per minute
    void changeCadence(int newValue);

    void changeGear(int newValue);

    void speedUp(int increment);

    void applyBrakes(int decrement);
}

要实现此接口,您的类的名称将更改(例如,对于特定品牌的自行车,例如ACMEBicycle),并且您将在类声明中使用implements关键字:

class ACMEBicycle implements Bicycle {

    // remainder of this class 
    // implemented all methods of interface
}

接口根本没有构造函数,如果你在接口中有方法,那么你必须实现类中的所有方法,否则标记你实现接口为抽象的类

这是界面中的抽象方法而不是构造函数

public IA(int, int, int, int, int, int, int);