当前位置: 首页 > 面试题库 >

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

谭宏盛
2023-03-14
问题内容

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

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 
{
}


 类似资料:
  • 问题内容: 为什么在接口中使用的变量是PUBLIC STATIC FINAL?为什么特别是“静态”? 问题答案: 无论如何,在接口中声明的字段只能是常量,那么为什么它取决于您使用哪个实例来访问它? 无论如何,将字段放在接口中通常都是不好的样式。该接口旨在反映实现该接口的类的功能-这与常量的概念完全正交。使用接口 只是 声明一堆常量肯定是一个讨厌的主意。我偶尔会发现使接口类型公开简单的实现很有用,例

  • 这里列出了所有文档化的结构体和联合体的成员变量,并附带结构或联合所属的文件: - a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : a

  • 我试图通过visual Studio中的android绑定库将clover.aar文件绑定到xamarin。我把它归结为两个错误: “Decimal”不实现接口成员“icomparable.comapreto(对象)”

  •   - a - addr : rt_i2c_bus_device , rt_i2c_msg ai_addr : addrinfo ai_addrlen : addrinfo ai_canonname : addrinfo ai_family : addrinfo ai_flags : addrinfo ai_next : addrinfo ai_protocol : addrinfo ai_soc

  • 主要内容:在类体中和类体外定义成员函数的区别类可以看做是一种数据类型,它类似于普通的数据类型,但是又有别于普通的数据类型。类这种数据类型是一个包含成员变量和成员函数的集合。 类的成员变量和普通变量一样,也有数据类型和名称,占用固定长度的内存。但是,在定义类的时候不能对成员变量赋值,因为类只是一种数据类型或者说是一种模板,本身不占用内存空间,而变量的值则需要内存来存储。 类的成员函数也和普通函数一样,都有返回值和参数列表,它与一般函数的区别是

  • 我正在创建一个必须连接到active directory的应用程序。 在处理更新组成员时,我实际上面临着一个问题。 组名为:GG Collaboration Agencyxxx 下面是引发异常的我的GroupRepository类代码: 这是我的全栈错误: