1. ホーム
  2. java

[解決済み] インターフェイスには正しいメソッドを持つ以上のものがあるのか

2022-04-26 15:46:13

質問

このようなインターフェイスがあるとします。

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 の実際のクラスは、反復のどのボックスにいるかによって変わるにもかかわらず。