首先,要明确的是,我知道什么是接口。
我的意思是,我是否可以要求实现接口的类具有接口中提到的构造函数?
如下:
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) {
....
}
}
答案 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);