接口中的属性/成员变量?

新手上路,请多包涵

我想知道有什么方法可以强制实现类声明对象句柄/基元,就像它们对方法所做的那样。例如:

 public interface Rectangle {
    int height = 0;
    int width = 0;

    public int getHeight();
    public int getWidth();
    public void setHeight(int height);
    public void setWidth(int width);
}

public class Tile implements Rectangle{
    @Override
    public int getHeight() {
        return 0;
    }

    @Override
    public int getWidth() {
        return 0;
    }

    @Override
    public void setHeight(int height) {
    }

    @Override
    public void setWidth(int width) {
    }

}

在上述方法中,我们如何强制 Tile 类使用接口声明高度和宽度属性?出于某种原因,我希望只使用界面!

我最初考虑将它与继承一起使用。但问题是我必须处理 3 节课。!

  1. 长方形
  2. J标签。!
  class Tile extends JLabel implements Rectangle {}

会工作。!

class Tile extends JLabel extends Rectangle {}

不会。!

原文由 Shrey 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 645
2 个回答

接口的重点是指定公共 API。接口没有状态。您创建的任何变量实际上都是常量(因此在接口中创建可变对象时要小心)。

基本上一个接口在这里说的是实现它的类必须支持的所有方法。如果 Java 的创建者不允许在接口中使用常量可能会更好,但现在摆脱它为时已晚(并且在某些情况下常量在接口中是明智的)。

因为您只是指定必须实现哪些方法,所以不知道状态(没有实例变量)。如果你想要求每个类都有一个特定的变量,你需要使用一个抽象类。

最后,一般来说,您不应该使用公共变量,因此将变量放入接口的想法一开始是个坏主意。

简短的回答 - 你不能做你想做的事,因为它在 Java 中是“错误的”。

编辑:

 class Tile
    implements Rectangle
{
    private int height;
    private int width;

     @Override
    public int getHeight() {
        return height;
    }

    @Override
    public int getWidth() {
        return width;
    }

    @Override
    public void setHeight(int h) {
        height = h;
    }

    @Override
    public void setWidth(int w) {
        width = w;
    }
}

一个替代版本是:

 abstract class AbstractRectangle
    implements Rectangle
{
    private int height;
    private int width;

     @Override
    public int getHeight() {
        return height;
    }

    @Override
    public int getWidth() {
        return width;
    }

    @Override
    public void setHeight(int h) {
        height = h;
    }

    @Override
    public void setWidth(int w) {
        width = w;
    }
}

class Tile
    extends AbstractRectangle
{
}

原文由 TofuBeer 发布,翻译遵循 CC BY-SA 3.0 许可协议

接口 不能 要求定义实例变量——只有方法。

变量可以在接口中定义,但它们的行为并不像预期的那样:它们被视为 final static 。)

快乐的编码。

原文由 user166390 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题