接口中的属性/成员变量?
我想知道有什么方法可以强制实现者类声明对象的句柄/基元,就像它们对方法所做的那样。例如:
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类使用该接口声明height和width属性?由于某些原因,我只想使用界面来做!
我最初考虑将其与继承一起使用。但是,我必须处理3个班级。
- 长方形
- 瓦
JLabel!
class Tile extends JLabel implements Rectangle {}
会工作。!
但
class Tile extends JLabel extends Rectangle {}
不会。!
回答:
接口的重点是指定公共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
{
}
以上是 接口中的属性/成员变量? 的全部内容, 来源链接: utcz.com/qa/418189.html