1

インターフェイスを使用したコード

/* FileName : cat SampleInterface.java */
public interface SampleInterface
{
        public void draw();
        public void color();
}

および抽象メソッドを使用したコード

/* FileName : SampleAbstractMethod.java  */
abstract class SampleAbstractMethod
{
        public abstract void draw();
        public abstract void color();
}

両者はどのような点で異なっていますか?

確かに大きな違いがあるに違いありません。抽象メソッドで十分だった場合、Java 開発者はインターフェイスを持ち込まなかったでしょう。私が共通して見ているのは、

  1. 私が投稿したコードのように、どちらも定義を持つことはできません。

  2. 継承または実装するクラスは、定義を取り込む必要があります。

今私が見る限り、抽象メソッドはインターフェイスができることを行うことができます.では、なぜインターフェイスがあるのですか?, 抽象メソッドができないインターフェイスの何が特別なのですか? 正確な理由とインターフェイスが必要ですか?

編集:私の質問は、抽象メソッドとインターフェイスの違いについてabstract classesであり、重複したリンクが私を指しているわけではありません。私の質問がマークされた重複とどのように似ているかを説明してください。

4

5 に答える 5

2

抽象クラスは、「is a」関係がある場合にのみ使用されます。インターフェイスは、共通点のないクラスによって実現できます。

抽象クラスはメソッドを実現できます。インターフェイスはメソッドを実現できません。

インターフェイスは、定数値とメソッドのみを記述できますが、それらを実現することはできません。インターフェイスのすべてのメソッドはpublic abstractデフォルトで、変数はpublic static finalです。

Java クラスでは、多くのインターフェースを継承 (実現) できますが、抽象クラスは 1 つだけです。

抽象クラスを使用すると、それを継承するクラスの個性が失われます。インターフェイスを使用すると、各クラスの機能を拡張できます。

インターフェイスの例は「飛行」です: 蝶、鳥、または飛行機。抽象クラスの例は、サッカー、クリケット、チェスなどの「ゲーム」です。

更新: メソッドに関しては、インターフェイスと抽象クラスの両方で抽象メソッドを使用できます。それらをどこで使用するかを選択するだけです。そして、この質問は、インターフェースと抽象クラスの違いにつながります。

于 2013-09-29T13:03:18.280 に答える
1

あなたの質問は、抽象メソッドとインターフェースの違いについてです。しかし、インターフェイスのすべてのメソッドが抽象的であるということを 1 つ忘れていると思います。したがって、インターフェースと抽象のメソッドは同じです。

さて、インターフェースの必要性は、多重継承の必要性を満たすことです。抽象クラスは、具体的なクラスを作成する必要がある場合に使用されますが、すべてのサブクラスに共通の状態があること、または一部の操作に対して可能な共通の実装があることを確認したい場合に使用されます。

于 2013-09-29T13:39:36.410 に答える
1

そのすべては可能性です;-)

インターフェイスでは、関数宣言を行う可能性しかありません。したがって、どういうわけか、変数を定義することさえできないという制限があります(できる定数)...

抽象クラスでは、両方を行うことができます! ソース コードの有無にかかわらず関数を使用できます。変数などを持つことができます...

重要なことは、親として使用できる抽象クラスは 1 つだけですが、必要な数の親インターフェイスを使用できることです。

したがって、実際には、あなたの場合に何が必要で、 OOPの概念をどのように活用するかが問題です。

コードを減らしたいだけなら何も考えずに使っても構いませんが、より信頼性の高いものを作りたいならサブタイピングの詳細を読んでください

于 2013-09-29T13:18:57.167 に答える
0

Oracle の公式ドキュメントを参照してください: http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html (抽象クラス) およびhttp://docs.oracle.com/javase/tutorial/java /IandI/createinterface.html (インターフェース)。

そして、抽象クラスとインターフェースに関するスタックオーバーフローでの素晴らしい議論がここにあります: Javaの抽象クラスとインターフェース

于 2013-09-29T13:04:21.760 に答える