「こんにちは、アミーゴ! 今日はいくつかの発見をするつもりです。今日のトピックは、ドラムロールでお願いします。インターフェイスです。

「そうだね。とても素晴らしい一日だったので、家に帰ってお風呂に入ります。」

"インターフェイスは、抽象化とポリモーフィズムの子です。インターフェイスは、すべてのメソッドが抽象である抽象クラスによく似ています。クラスと同じ方法で宣言されますが、キーワードが使用されます。いくつかの例を次に示します。interface"

コード 説明と事実
interface Drawable
{
void draw();
}
interface HasValue
{
int getValue();
}
1) という単語の代わりにclass、 と書きますinterface

2) 抽象メソッドのみが含まれています (abstract という単語を追加する必要はありません)。

3) 実際、インターフェイス上のすべてのメソッドはパブリックです。

interface Element extends Drawable, HasValue
{
int getX();
int getY();
}
インターフェイスは他のインターフェイスのみを継承できます。

多くの親インターフェイスを持つことができます。

class abstract ChessItem implements Drawable, HasValue
{
private int x, y, value;

public int getValue()
{
return value;
}

public int getX()
{
return x;
}

public int getY()
{
return y;
}

}
クラスは複数のインターフェイス (ただし 1 つのクラスのみ) を継承できます。この継承を示すために、キーワード を使用します implements

このChessItem クラスは抽象として宣言され、draw を除くすべての継承されたメソッドを実装しました。

つまり、 にはChessItem 1 つの抽象メソッドが含まれています draw()

「興味深いですね。でも、なぜインターフェイスが必要なのでしょうか?いつ使用されるのですか?」

「インターフェイスにはクラスに比べて 2 つの大きな利点があります。」

1) 「メソッド定義」とメソッド実装の分離。

他のクラスが自分のクラスのメソッドを呼び出せるようにしたい場合は、それらのメソッドを としてマークする必要があると以前に説明しましたpublic。特定のメソッドを独自のクラスからのみ呼び出すようにするには、それらのメソッドに のマークを付ける必要がありますprivate。言い換えれば、クラスのメソッドを「全員向け」と「私専用」という 2 つのカテゴリに分類しています。

インターフェースを使用すると、この分離をさらに強化できます。2つ目の「私だけのクラス」を継承して、特別な「みんなのクラス」を作ります。それは次のようになります。

class Student
{
 private String name;

 public Student(String name)
 {
  this.name = name;
 }

 public String getName()
 {
  return this.name;
 }

 private void setName(String name)
 {
  this.name = name;
 }
interface Student
{
 public String getName();
}

class StudentImpl implements Student
{
 private String name;
 public StudentImpl(String name)
 {
  this.name = name;
 }
 public String getName()
 {
  return this.name;
 }
 private void setName(String name)
 {
  this.name = name;
 }
}
public static void main(String[] args)
{
 Student student =
               new Student("Alibaba");
 System.out.println(student.getName());
}
public static void main(String[] args)
{
 Student student =
               new StudentImpl("Ali");
 System.out.println(student.getName());
}

クラスを 2 つの部分、つまりインターフェイスインターフェイスを実装するクラスに分割します。

「それで、どんなメリットがあるの?」

「同じインターフェイスを異なるクラスで実装(継承)できます。そして、各クラスは独自の動作を持つことができます。ArrayListLinkedList List インターフェイスの 2 つの異なる実装であるのと同じです。

したがって、さまざまな実装だけでなく、その実装を含むクラスも非表示にします (コード内のどこでもインターフェイスを使用できます)。これにより、プログラムの実行中に一部のオブジェクトを別のオブジェクトに非常に柔軟に置き換えることができ、オブジェクトを使用するクラスの知識がなくてもオブジェクトの動作を変更できます。

ポリモーフィズムと組み合わせると、これは非常に強力なテクニックになります。現時点では、なぜこれを行う必要があるのか​​は明らかではありません。インターフェイスがどのように作業を大幅に簡素化するかを理解するには、まず数十または数百のクラスで構成されるプログラムに遭遇する必要があります。

2) 多重継承。

Java では、各クラスは親クラスを 1 つだけ持つことができます。他のプログラミング言語では、多くの場合、クラスは複数の親クラスを持つことができます。これは非常に便利ですが、多くの問題も引き起こします。

Java には妥協点があります。  複数のクラスを継承することはできませんが、複数のインターフェースを実装することはできます。 インターフェイスには複数の親インターフェイスを持つことができます。 クラスは複数のインターフェイスを実装し、親クラスを 1 つだけ継承できます。