接口变量是否可以从实现类中分配变量?
答案 0 :(得分:16)
如果您询问以下内容是否有效,则答案为否:
public interface Foo {
public int thing = 21;
...
}
public class FooImpl implements Foo {
public void someMethod() {
thing = 42; // compilation error here
}
}
原因是Foo.thing
不是变量变量。它是隐式地 final
和static
;即它是一个静态常数。
如果您希望Foo
接口的实例实现“变量”,那么接口应该定义getter和setter方法,并且这些方法应该在实现类中实现(例如)来保存相应的在类声明的私有实例变量中的状态。
另一方面,如果您询问以下内容是否有效,则答案为是:
public interface Foo {
...
}
public class FooImpl implements Foo {
...
}
public class Test {
FooImpl fi = ...;
Foo f = fi; // OK.
}
答案 1 :(得分:2)
答案 2 :(得分:1)
如果需要一个指定获取/设置变量的接口的接口,请在接口中包含适当的getVariable / setVariable方法,以便接口实现者需要实现它们。
答案 3 :(得分:0)
接口:系统需求服务。
在接口中,变量默认是由public,static,final访问修饰符分配的。因为:
public:有时接口可能会放在其他软件包中。因此,它需要从项目中的任何位置访问变量。
静态:这样的不完整类无法创建对象。因此,在项目中,我们需要访问没有对象的变量,以便我们可以在
的帮助下进行访问interface_filename.variable_name
最终:假设一个接口由许多类实现,并且所有类都尝试访问和更新接口变量。因此,这会导致数据更改不一致并影响其他所有类。因此,需要使用final声明访问修饰符。
由于接口变量的这种设计,其实现类无法分配或更新变量的值。它只能访问接口变量。