継承の Java OOP パラダイムについて話す人は、通常、親クラスを継承者である子クラスで拡張することを意味します。ただし、Java のimplements キーワードに遭遇した場合、それは別の抽象化レベルに移行し、Java でインターフェイスの操作を開始することを意味します。インターフェースとは何なのか、何のためにあるのか、実装はどのように行われるのかについてお話しします。
インターフェースと実装とは何ですか
「インターフェース」という言葉を何度も聞いたことがあるでしょう。たとえば、コンピュータには入力インターフェイス (マウスとキーボード) があり、多くのプログラムにはユーザー インターフェイスがあります。最も広い意味では、インターフェイスは、対話する 2 つの当事者間のリンクです。たとえば、同じキーボードやテレビのリモコンなどです。プログラミング、特に Java において、インターフェイスは、それを実装するクラスが何を行うかを指定する特定の規約です。インターフェイスは動作を定義するだけです。それを実装するオブジェクトについては何も述べていません。Java では次のようにインターフェースを宣言できます。
public interface MyInterface {
// constants declaration
// methods without implementation
// static methods
// default methods (default)
// private methods
}
Java での Implements の構文は次のとおりです。
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
インターフェースは動作を指定せずに記述します。たとえば、「動き」などの動作は、自転車、人、車、川の水など、さまざまな種類のオブジェクトに適用できます。泳ぐという行動は、アヒル、船、魚の行動である可能性があります。これらの物体には、移動したり泳いだりできるという点以外に共通点はありません。はい、水泳の動きそのものが大きく異なります。ただし、Java では、Duck、Boat、Fishクラスを作成して、それらに泳ぐ機能を実装させることができます。ここで Java Implementsキーワードが使用されます。
キーワードの実装例
public interface Swimmable {
void moveForward();
void TurnRight();
void TurnLeft();
}
ご覧のとおり、メソッド自体は実装されていません。しかし、このインターフェイスを実装するクラスは、右折や左折だけでなく、直線的に泳ぐこともできなければならないと宣言しました。このインターフェースを実装するクラスを作成しましょう。
public class Duck implements Swimmable {
//implementing the methods
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
}
public class Fish implements Swimmable {
public void moveForward() {
System.out.println("I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft() {
System.out.println("I am turning left...");
}
public void turnUp(){
System.out.println("I am turning up...");
}
public void turnDown(){
System.out.println("I am turning down...");
}
public void Stop() {
System.out.println("I am relaxing somewhere under the water surface...");
}
}
Swimmableインターフェイス を実装するすべてのクラスは、規約に従って、右や左に回転できるだけでなく、前方に泳ぐこと ( moveForward()メソッドを実装すること) ができる必要があります。これらのメソッドの実装が必要です。アヒルと魚は泳ぎ方が違います。魚が上下に泳ぐ機能を実装する 2 つの追加メソッドを持っているとします。Swimmable インターフェイスにはこれがありません。ただし、Fish クラスの子 (たとえば、Tuna や Salmon) を作成すると、それらは他の「Fish」と同様に、上下に泳ぐことができるようになります。
Java の複数のインターフェイス
すでにご存知かと思いますが、Java は多重継承をサポートしていません。つまり、1 つのクラスは 1 つのスーパークラスからのみ継承できます。ただし、クラスは複数のインターフェイスを実装できるため、Java では依然として「多重継承」を使用できます。
To implement multiple interfaces, use the next syntax:
interface MyFirstInterface {
public void myMethod();
}
interface MySecondInterface {
public void myOtherMethod();
}
// MyClass implements both MyFirstInterface and MySecondInterface
class MyClass implements MyFirstInterface, MySecondInterface {
public void myMethod() {
//method implementation
}
public void myOtherMethod() {
//method implementation
}
}
複数のインターフェースの例
アヒルは泳ぐだけでなく飛ぶこともできることを忘れないでください。フライト インターフェイスを作成して、アヒルに実装しましょう。
public interface Flyable {
double startAge = 0.1;
void fly();
}
public class Duck implements Swimmable, Flyable {
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
public void fly(){
System.out.println("I am flying!!!");
}
}
そして、繰り返しになりますが、なぜインターフェースを作成するのかを思い出すことが重要です。それが鳥、飛行機、スカイダイバー、タンポポに実装された場合、その飛行はまったく異なるものになるとします。
GO TO FULL VERSION