我想知道有什么方法可以强制实现类声明对象句柄/基元,就像它们对方法所做的那样。例如:
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 节课。!
- 长方形
- 瓦
- J标签。!
class Tile extends JLabel implements Rectangle {}
会工作。!
但
class Tile extends JLabel extends Rectangle {}
不会。!
原文由 Shrey 发布,翻译遵循 CC BY-SA 4.0 许可协议
接口的重点是指定公共 API。接口没有状态。您创建的任何变量实际上都是常量(因此在接口中创建可变对象时要小心)。
基本上一个接口在这里说的是实现它的类必须支持的所有方法。如果 Java 的创建者不允许在接口中使用常量可能会更好,但现在摆脱它为时已晚(并且在某些情况下常量在接口中是明智的)。
因为您只是指定必须实现哪些方法,所以不知道状态(没有实例变量)。如果你想要求每个类都有一个特定的变量,你需要使用一个抽象类。
最后,一般来说,您不应该使用公共变量,因此将变量放入接口的想法一开始是个坏主意。
简短的回答 - 你不能做你想做的事,因为它在 Java 中是“错误的”。
编辑:
一个替代版本是: