抽象メソッドにボディを指定することはできません。抽象メソッドは不完全であることを意味します。
インターフェイスと抽象クラスについてもっと理解する必要があると思います。
Java やその他のオブジェクト指向プログラミング言語でインターフェイスと抽象クラスが何を意味するかを理解するには、まず継承を理解する必要があります。
継承
車とバスを考えてみましょう。それらは2つの異なる車両です。それでも、ステアリング、ブレーキ、ギア、エンジンなど、いくつかの共通のプロパティを共有しています。
したがって、継承の概念を使用すると、これは次のように表すことができます..
public class Vehicle {
public Driver driver;
public Seat[] seatArray; //In java and most of the Object Oriented Programming(OOP) languages, square brackets are used to denote arrays(Collections).
//You can define as many properties as you want here..
}
今は自転車..
public class Bicycle extends Vehicle {
//You define properties which are unique to bicycles here..
public Pedal pedal;
}
そして車..
public class Car extends Vehicle {
public Engine engine;
public Door[] doors;
}
継承については以上です。上で見たように、それらを使用して、オブジェクトをより単純な基本フォームとその子に分類します。
抽象クラス
抽象クラスは不完全なオブジェクトです。さらに理解を深めるために、車両のアナロジーをもう一度考えてみましょう。
車両を運転することができます。右?しかし、乗り物によって運転方法は異なります。たとえば、自転車を運転するように車を運転することはできません。
では、車両の駆動機能をどのように表現するのでしょうか? 車の種類を確認して、独自の機能で運転するのは難しいです。新しいタイプの車両を追加するときは、ドライバー クラスを何度も変更する必要があります。
ここに、抽象クラスとメソッドの役割があります。drive メソッドを抽象として定義して、継承するすべての子がこの関数を実装する必要があることを伝えることができます。
したがって、車両クラスを変更すると..
//......Code of Vehicle Class
abstract public void Drive();
//.....Code continues
自転車と車は、運転方法も指定する必要があります。そうしないと、コードがコンパイルされず、エラーがスローされます。
要するに..抽象クラスは、いくつかの不完全な関数を持つ部分的に不完全なクラスであり、継承する子が独自に指定する必要があります。
インターフェース
インターフェイスは完全に不完全です。プロパティはありません。それらは、継承する子が何かを実行できることを示しているだけです..
さまざまな種類の携帯電話を持っているとします。それぞれに、さまざまな機能を実行するさまざまな方法があります。例:人に電話する。電話のメーカーは、それを行う方法を指定します。ここで、携帯電話は番号をダイヤルできます。つまり、ダイヤル可能です。これをインターフェースとして表現しましょう。
public interface Dialable {
public void Dial(Number n);
}
ここで Dialable のメーカーは、番号のダイヤル方法を定義します。ダイヤルする番号を指定するだけです。
Dialable myPhone1 = new Dialable() {
public void Dial(Number n) {
//Do the phone1's own way to dial a number
}
}
Dialable myPhone2 = new Dialable() {
public void Dial(Number n) {
//Do the phone2's own way to dial a number
}
}
ここでは、抽象クラスの代わりにインターフェイスを使用することで、そのプロパティについて心配する必要はありません。例: タッチ スクリーンまたはダイヤル パッドはありますか、固定電話または携帯電話ですか。ダイヤル可能かどうかを知る必要があるだけです。Dialable インターフェイスを継承 (または実装) しますか。
インターフェイスは、オブジェクト間の相互運用性を確保するために開発者によって一般的に使用されますが、それらが共通の機能を共有している場合に限ります (番号をダイヤルする必要がある限り、固定電話や携帯電話に変更する場合と同様)。要するに、インターフェイスは、プロパティを持たない、抽象クラスのより単純なバージョンです。
また、必要な数のインターフェイスを実装 (継承) できますが、拡張 (継承) できるのは 1 つの親クラスのみであることに注意してください。
より詳しい情報
抽象クラス vs インターフェース
Stackoverflow の別の同様の質問