如何确保在所有子类中使用变量?

时间:2014-09-30 10:17:00

标签: java oop inheritance

如果我有一个接口车,将在BMW,AUDI等各种类别上实施。现在我希望他们所有人都有一个字符串实例颜色,其颜色应该存储在其中。因为它们都可以有不同的颜色,所以我不能在界面中为它定义一个变量作为强制性最终,因此它的值不会根据类的需要而改变。那么有什么办法可以确保每个班级都使用这种颜色。

另外请告诉我,为什么界面中的变量总是最终的,即如果它们不是最终变量会是什么问题。 我已经对以下问题进行了审核,但没有一个令人满意 Why are interface variables static and final by default?

Interface Variables

Variables in Interface

而其他人也很少。

5 个答案:

答案 0 :(得分:2)

您的界面将提供以下方法:

void setColor(String color);

String getColor();

然后子类可以实现这些方法

您不会将变量本身存储在接口中,因为这是一个实现细节

答案 1 :(得分:1)

为什么要使用界面?

使用抽象类来保存颜色数据似乎更好(在界面上使用get / set并不强制存在字段......)

public abstract class AbstractAuto {

    private String color;

    public void setColor(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }

    public abstract void ignite();

    ...
}

public class Audi extends AbstractAuto {

    Audi()
    {
        setColor("red");
    }

    @Override
    public void ignite() {
        // TODO Auto-generated method stub

    }
}

答案 2 :(得分:0)

不,您不能通过接口强制使用实例变量。您只能强制实现者拥有'getColor()'。如果需要实例变量,可以使用实例变量创建基类,让其他人扩展您的类。

答案 3 :(得分:0)

接口是指实现它的类需要遵循的合同。

因此,在合同中定义某些内容。在这里,您希望用户强制使用颜色,然后在界面中定义方法,这将迫使他有颜色

void setColor(String color);

String getColor();

为什么界面变量是最终的?

你会得到很多参考资料。但用简单的话来理解。接口意味着强制对实现它的类做一些事情。因此,我们将变量作为final,因为我们强制类只应使用此值而不是任何其他值。

static final int WHEELS=4;

答案 4 :(得分:0)

我搜索了ans,我得到的令人满意的答案是,实例成员在调用构造函数时获取内存,这在接口的情况下是不可能的,因此它们需要是静态的,以便它们获得内存。

并且考虑到最终的原因是为了避免数据模糊。让我们考虑并设想当两个类实现一个接口并访问一个静态的静态数据成员时,从一个类完成的更改会影响另一个类的值,从而导致数据模糊,因此它们是最终的。