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

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

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个班级。

  1. 长方形
  2. 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

回到顶部