それがどのようにして起こったのか
抽象クラスに基づいて、さらに規定が作成されます。
抽象クラスには通常のメソッドと抽象メソッドを含めることができるため、抽象クラスに抽象メソッドと定数しかない場合は、インターフェイスとして定義できます。
インターフェイスは特別な抽象クラスです。
インターフェースを定義する
interface 接口名 {
常量;
抽象方法;
}
インターフェイスのデフォルトの定義は定数です。
public static final int x = 5;
同
int x = 5;
インターフェイスでデフォルトで定義されているメソッドは抽象メソッドであり、
public abstract a ();
同
a ();
インターフェイスにコンストラクターがなく、メソッドをインスタンス化できません。
インターフェイスを実装する
インターフェイスを実装するクラスは実装クラスと呼ばれ、実装クラスはインターフェイス内のすべてのメソッドを実装する必要があり、すべてがパブリックで装飾されている必要があります
class 类名 implements 接口名 {
}
特性
- クラスは、コンマで区切られた複数のインターフェイスを実装できます
- jdk8より上:メソッド本体を持つことができる変更されたインターフェースのメソッドにデフォルトを追加し、実装クラスはこのメソッドを強制しません。
interface 接口名 {
public default f () {
}
}
この理由は?
たとえば、インターフェイスの定義には多くのメソッドがあります。実装クラスがメソッドの1つだけを実装したい場合は、使用されない他のメソッドを作成する必要がありますが、これはあまり友好的ではありません。だからこれを追加しました、
継承
1つのインターフェイスは、クラス間の継承方法と同様に、別のインターフェイスを継承できます。
// 文件名: Sports.java
public interface Sports
{
public void setHomeTeam(String name);
public void setVisitingTeam(String name);
}
// 文件名: Football.java
public interface Football extends Sports
{
public void homeTeamScored(int points);
public void visitingTeamScored(int points);
public void endOfQuarter(int quarter);
}
多重継承:
Javaでは、クラスの多重継承は違法ですが、インターフェースは多重継承を許可します。
public interface Hockey extends Sports, Event
効果
- 多重継承の間接実現(Javaクラスは多重継承をサポートしていません)
- インターフェイスを介して規範と標準を定義する
- 個別の標準的な定式化と実装
スケーラビリティを向上させるためのインターフェース指向プログラミングを提案する
インターフェイスと抽象クラスの比較
同じ点:
- インスタンス化できません
- 抽象メソッドを含めることができます
差:
- インターフェイスには静的定数のみがあり、抽象クラスには通常のメンバー変数があります。
- 抽象インターフェースメソッドのみ、非抽象メソッドが存在する場合があります(
default
変更された抽象クラスを使用) - インターフェイスにはコンストラクターは含まれていませんが、抽象クラスにはコンストラクターを含めることができます
- インターフェイスでは多重継承がサポートされていますが、抽象クラスは多重継承をサポートしていません