Javaインターフェイス
インターフェース
Javaで抽象化を実現する別の方法は、インターフェースを使用することです。
Aninterface
は完全に「抽象クラス」であり、関連するメソッドを空の本体でグループ化するために使用されます。
例
// interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void run(); // interface method (does not have a body)
}
implements
インターフェイスメソッドにアクセスするには、インターフェイスを(の代わりに)キーワードを使用して別のクラスで「実装」(継承のようなもの)する必要がありますextends
。インターフェイスメソッドの本体は、「implement」クラスによって提供されます。
例
// Interface
interface Animal {
public void animalSound(); // interface method (does not have a body)
public void sleep(); // interface method (does not have a body)
}
// Pig "implements" the Animal interface
class Pig implements Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The pig says: wee wee");
}
public void sleep() {
// The body of sleep() is provided here
System.out.println("Zzz");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
myPig.sleep();
}
}
インターフェースに関する注記:
- 抽象クラスと同様に、インターフェイスを使用してオブジェクトを作成することはできません(上記の例では、MyMainClassで「動物」オブジェクトを作成することはできません)。
- インターフェイスメソッドには本体がありません-本体は「implement」クラスによって提供されます
- インターフェイスの実装では、そのすべてのメソッドをオーバーライドする必要があります
- インターフェイスメソッドはデフォルト
abstract
であり、public
- インターフェイス属性はデフォルト
public
で、static
およびfinal
- インターフェイスにコンストラクターを含めることはできません(オブジェクトの作成には使用できないため)
インターフェースを使用する理由と時期
1)セキュリティを実現するには-特定の詳細を非表示にし、オブジェクト(インターフェイス)の重要な詳細のみを表示します。
2)Javaは「多重継承」をサポートしていません(クラスは1つのスーパークラスからのみ継承できます)。ただし、クラスは複数のインターフェース を実装できるため、インターフェースを使用して実現できます。注:複数のインターフェースを実装するには、それらをコンマで区切ります(以下の例を参照)。
複数のインターフェース
複数のインターフェースを実装するには、それらをコンマで区切ります。
例
interface FirstInterface {
public void myMethod(); // interface method
}
interface SecondInterface {
public void myOtherMethod(); // interface method
}
class DemoClass implements FirstInterface, SecondInterface {
public void myMethod() {
System.out.println("Some text..");
}
public void myOtherMethod() {
System.out.println("Some other text...");
}
}
class Main {
public static void main(String[] args) {
DemoClass myObj = new DemoClass();
myObj.myMethod();
myObj.myOtherMethod();
}
}