java接口中的变量

时间:2015-05-21 16:08:26

标签: java variables interface

我创建了一个名为Polygon的java接口,它包含各种抽象方法,如getArea()getNVertices()。它将由三角形,四边形等子类实现,这些子类又被扩展(例如,Quadranglateral由Rectangle扩展)。

现在每个Polygon将由多个顶点定义(我将它们放在Vertex数组中,其中包含x和y坐标)。由于每个Polygon都会使用这个数组,我想知道:是否可以在Polygon接口中定义一个Vertex数组?我该怎么做?

5 个答案:

答案 0 :(得分:4)

您无法在界面内定义变量(属性将是静态的和最终的)。您的解决方案是通过抽象类实现它。

答案 1 :(得分:2)

在这种情况下,通常的做法是同时编写接口和抽象类。

接口定义了多边形的契约,而抽象类包含默认实现 - 可以包括像顶点数组这样的属性,以及任何想要默认实现的方法。

所以你会有类似的东西:

public interface Polygon { ... }

在另一个档案中

public abstract class BasePolygonImpl implements Polygon {

    protected Vertex[] vertices;

    // ...
}

这样做的原因是,如果一个人想要创建一个以不同方式实现的Polygon(例如,有一个顶点链接列表或将其顶点保存在数据库中),他们可以创建一个实现的类Polygon并忽略BasePolygonImpl类。

但是如果他们想要实现扩展而不是替换默认实现的多边形,他们可以决定使用BasePolygonImpl作为他们的超类,以避免重复基础实现。

需要注意的重点是接口不定义实现,因此不能包含常量以外的字段。只有类可以定义实现。

答案 2 :(得分:1)

Java接口不能包含实例变量。如果让它们看起来真的适合你,也许你应该考虑使用an abstract class代替(或另外)接口。

答案 3 :(得分:0)

界面内的所有变量都是public static final,

如果将顶点[]放在Polygon界面中,则只会为所有三角形实例创建一个Vertex实例。

你可以添加vertex []是你所有的子类(三角形等)然后声明  Polygon界面中的顶点[]的getter和setter。 或者你可以使用抽象类作为上面提到的其他朋友。

答案 4 :(得分:0)

替代建议:如果要求每个Polygon都有Vertex列表,那么您可以定义一个接口方法:

List<Vertex> getVertices();

如果您的多边形是不可变的,这是一个明智的想法,那么您可以推荐Polygon实现者返回com.google.common.collect.ImmutableList或类似的东西。