1
121
从你所描述的一些事情中:
…这些要求正是 abstract classes 是为了。 |
2
67
当您允许接口中的构造函数时,一个问题来自于同时实现多个接口的可能性。当一个类实现几个定义不同构造函数的接口时,该类必须实现几个构造函数,每个构造函数只满足一个接口,而不满足其他接口。无法构造调用每个构造函数的对象。 或在代码中:
|
3
10
接口为API定义了一个契约,这是API的实现者和用户都同意的一组方法。接口没有实例实现,因此没有构造函数。 您描述的用例类似于一个抽象类,其中构造函数调用一个在子类中实现的抽象方法的方法。 这里固有的问题是,在执行基本构造函数时,子对象尚未构造,因此处于不可预知的状态。 总结一下:当您从父构造函数调用重载方法时,是否会遇到麻烦,引用 mindprod :
|
4
4
接口中只有静态字段在子类中创建对象时不需要初始化,接口方法必须在子类中提供实际的实现,因此接口中不需要构造函数。 第二个原因是在子类的对象创建过程中,调用了父构造函数。但是如果实现了多个接口,那么在调用接口构造函数期间,将发生冲突,关于哪个接口的构造函数将首先调用 |
5
2
接口方法中未引用的依赖项应视为实现细节,而不是接口强制执行的内容。当然也可能有例外,但是作为一个规则,您应该将接口定义为行为的期望值。给定实现的内部状态不应该是接口的设计问题。 |
6
2
你可以尝试的工作就是定义一个
但是,此解决方法确实要求您使用
例如。
|
7
1
见 this question 对于 为什么? (摘自评论)。 如果您真的需要这样做,您可能需要一个抽象的基类,而不是一个接口。 |
8
1
这是因为接口不允许在其中定义方法体。但是我们必须在与接口默认情况下为所有要定义的方法定义抽象修饰符相同的类中定义构造函数。这就是为什么我们不能在接口中定义构造函数。 |
9
1
如果要确保接口的每个实现都包含特定字段,只需 需要将该字段的getter添加到接口中 :
|
10
0
这里有一个使用这种技术的例子。在这个特定的示例中,代码使用模拟调用FireBase
|
11
0
一般来说,构造函数用于初始化特定类中与对象相关的非静态成员。 没有为接口创建对象,因为只有声明的方法,但没有定义的方法。为什么我们不能创建声明方法的对象?对象创建只是为非静态成员分配一些内存(堆内存中)。 JVM将为完全开发并准备好使用的成员创建内存。基于这些成员,JVM计算出需要多少内存并创建内存。 在声明方法的情况下,JVM无法计算这些声明方法需要多少内存,因为实现将在将来进行,而此时还没有完成。因此,不能为接口创建对象。 结论: 如果不创建对象,就无法通过构造函数初始化非静态成员。这就是为什么在接口内不允许使用构造函数的原因。(因为在接口内不使用构造函数) |