接口变量和实现类

时间:2011-01-30 01:17:28

标签: java

接口变量是否可以从实现类中分配变量?

4 个答案:

答案 0 :(得分:16)

如果您询问以下内容是否有效,则答案为否:

public interface Foo {
    public int thing = 21;
    ...
}

public class FooImpl implements Foo {
    public void someMethod() {
        thing = 42;  // compilation error here
    }
}

原因是Foo.thing不是变量变量。它是隐式地 finalstatic;即它是一个静态常数。

如果您希望Foo接口的实例实现“变量”,那么接口应该定义getter和setter方法,并且这些方法应该在实现类中实现(例如)来保存相应的在类声明的私有实例变量中的状态。

另一方面,如果您询问以下内容是否有效,则答案为是:

public interface Foo {
    ...
}

public class FooImpl implements Foo {
    ...
}

public class Test {
    FooImpl fi = ...;
    Foo f = fi;  // OK.
}

答案 1 :(得分:2)

,它不能。

接口中声明的每个字段都隐含public static final,即常量。因此,您无法从实现类中为其分配任何内容。

另见:

答案 2 :(得分:1)

如果需要一个指定获取/设置变量的接口的接口,请在接口中包含适当的getVariable / setVariable方法,以便接口实现者需要实现它们。

答案 3 :(得分:0)

接口:系统需求服务。

在接口中,变量默认是由public,static,final访问修饰符分配的。因为:

public:有时接口可能会放在其他软件包中。因此,它需要从项目中的任何位置访问变量。

静态:这样的不完整类无法创建对象。因此,在项目中,我们需要访问没有对象的变量,以便我们可以在

的帮助下进行访问
interface_filename.variable_name

最终:假设一个接口由许多类实现,并且所有类都尝试访问和更新接口变量。因此,这会导致数据更改不一致并影响其他所有类。因此,需要使用final声明访问修饰符。

由于接口变量的这种设计,其实现类无法分配或更新变量的值。它只能访问接口变量。