假设我有这个界面:

public interface IBox
{
   public void setSize(int size);
   public int getSize();
   public int getArea();
  //...and so on
}

我有一个实现它的类:

public class Rectangle implements IBox
{
   private int size;
   //Methods here
}

如果我想使用接口iBox,我实际上不能创建它的实例,如下所示:

public static void main(String args[])
{
    Ibox myBox=new Ibox();
}

正当所以我必须这样做:

public static void main(String args[])
{
    Rectangle myBox=new Rectangle();
}

如果这是真的,那么接口的唯一目的就是确保实现接口的类具有接口所描述的正确方法?或者界面还有其他用途吗?

推荐答案

接口是使代码更灵活的一种方法.你要做的是:

Ibox myBox=new Rectangle();

然后,稍后,如果您决定使用不同类型的框(可能还有另一个库,具有更好类型的框),请将代码切换到:

Ibox myBox=new OtherKindOfBox();

一旦你习惯了,你会发现这是一种很好的(实际上是必不可少的)工作方式.

另一个原因是,例如,如果要创建一个框列表,并对每个框执行一些操作,但希望列表包含不同类型的框.在每个盒子上,你可以做:

myBox.close()

(假设IBox有一个close()方法),即使myBox的实际类会根据迭代中所处的框而变化.

Java相关问答推荐

在applitcation.properties中找到的字符串中输入变量

屏蔽字母数字代码的Java正则表达式

Character::Emoji不支持带数字的字符吗?

存根基类的受保护方法

我需要生成一个文件来整合每个特性执行的所有JSON结果

如何在Java中从XML中获取特定的 node ,然后将其删除?

测试容器无法加载类路径初始化脚本

如何在EXCEL单元格中添加形状和文本

二进制数据的未知编码/序列化

Java堆中的许多java.time.ZoneRegion实例.ZoneId实例不应该被缓存吗?

Spring Boot中的应用程序.properties文件中未使用的属性

从LineChart<;字符串、字符串和gt;中删除数据时出现特殊的ClassCastException;

Java组件项目中的JavaFX对话框国际化

如何在运行docker的应用程序中获取指定的配置文件

JavaFX复杂项目体系 struct

如何设计包含已知和未知键值对映射的Java类?

为什么没有加载java.se模块?

无法在Java中获取ElastiCache的AWS CloudWatch指标

没有Google Play服务,Firebase Auth无法工作

始终使用Spring Boot连接mongodb上的测试数据库