Javaの基本:オブジェクト指向抽象クラス---

前の章では、我々は、使用の概念、インタフェースのいくつかの詳細を紹介します。あなたは非常にインターフェイスを理解していない場合は、学ぶために行くことができます。ジャンプします

この章では、我々は抽象クラス、内部クラス、列挙をご紹介します。

A.抽象クラス

抽象クラス:Javaは、クラスがインタフェースとクラスの間に介在抽象的な概念です。

名前が示すように、抽象クラスは、抽象クラスである。抽象化が比較的具体的には、一般的に、オブジェクトの特定のクラスは抽象クラスすることなく、直接対応しているが、それは、抽象化を表す一般上部比較コンクリートの親クラスでありますクラスの例では、犬は、特定のオブジェクトであり、そして動物が抽象化され、桜の特定のオブジェクト、および果物が抽象化され、正の方向は、特定のオブジェクトで、グラフィックスは、抽象化のいくつかは、天府ヨーロッパグラフィック処理させています。 Javaで抽象クラスの概念を説明するためのものです。

1.メソッドの抽象と抽象クラス

私たちは。Shapeが実際に抽象的な概念である)メソッドドローを持っているグラフィカルクラスの形状を、(導入する前に、そのdraw()メソッドが実際に達成する方法を知らない、唯一のサブクラスは、サブクラスだけが方法を知っていることを知っています方法は、一般的に抽象メソッドとして定義されます。

抽象メソッドを実装コードによって特定の方法、特定の方法のみ抽象メソッド宣言に相対的である、前のセクション(非Java 8と静的デフォルト方式の導入)におけるインターフェースのメソッドを実装していない彼らは、すべての抽象的方法。

抽象メソッドやクラスが適している抽象構文を宣言するためのキーワードは次のとおりです。

public abstract class Shape {
    // ... 其他代码
    public abstract void draw();
}

クラスの抽象メソッドが抽象メソッドずに抽象クラスを宣言したが、抽象クラスする必要があります定義します。抽象と具象クラスは、あなたがなど、特定のメソッド、インスタンス変数を定義することができ、それと具体的なクラス間のコアの違いは、抽象クラスを作成することができませんオブジェクトは、特定のクラス(例えば、新しいShape()を使用することはできません)

抽象クラスは、オブジェクトを作成するには、オブジェクトを作成することはできません、あなたがその特定のサブクラスを使用する必要があります。クラス抽象クラスを継承した後、それ自身が抽象クラスとして宣言されていない限り、すべての抽象メソッド、抽象クラス定義が達成されなければならない。ラウンドのクラスを実現コードは次のとおりです。

public class Circle extends Shape {
    //...其他代码
    
    @Override
    public void draw() {
        // ....
    }
}

器具ラウンドドロー()メソッドは、新しい新しい抽象クラスを使用していないが、インタフェースに類似しているが、以下のように、抽象クラス抽象クラスオブジェクト参照コンクリートサブクラス変数を宣言することができます。

Shape shape = new Circle();
shape.draw();

形状の形状はdraw()メソッドは、ドローサークルコードを呼び出し、変数の抽象クラスタイプ、具象サブクラスのオブジェクト参照円です。

2.なぜ我々は抽象クラスが必要なのか

抽象メソッドとクラスは、空のメソッド本体を定義する方法を知らない、抽象メソッドのために、余分のように見える、まだラインではないのですか?ルックスだけで不必要な制限を加えるというオブジェクトを作成しない抽象クラスです。

抽象メソッドとクラスの導入、いくつかのクラスとメソッドのために、Java構文が提供するツールであり、むしろ空のメソッド本体よりも抽象メソッドの不必要な使用を減らし、それらを正しく使用するようにユーザーを導くために、サブクラスは、それが実装する必要があります知っています方法、および無視Javaコンパイラがエラーを要求されます場合は、無視することは不可能。オブジェクトを作成する際、ユーザーのクラスを抽象クラスを使用して、あなたが特定のサブカテゴリーを使用したいことを知って、そして不可能不完全な親を誤用しなければなりません。

それはプログラムを書く、または通常は他の何かをするかどうかは、誰もが、間違いを犯す可能性のあるエラーは、人々の優れた品質に依存するだけでなく、普通の人が簡単に物事を右に成し遂げることができるように、いくつかのメカニズムを必要とすることはできません削減、物事を間違っを取得することは困難です抽象クラスは、Javaが提供するそのようなメカニズムです。

3.抽象クラスとインタフェース

抽象クラスとインタフェースは、オブジェクトを作成するために同様に使用することができないし、インターフェースのメソッドは、実際抽象メソッドである。のみ抽象クラスは抽象方法を定義している場合、抽象クラスとインタフェースより多くが、抽象クラスなどと根本的に異なるインターフェイス、インターフェイスは、インスタンス変数を定義することができない、抽象クラスは、クラスは複数のインターフェイスを実装することができ、だけクラスを継承することができます。

抽象クラスとインタフェースを嵌合関係を交換していない、それらはしばしば一緒に使用される、宣言をインタフェースする能力、抽象クラスは、達成するために、全て又は方法の一部は、デフォルトの実装を提供するインタフェースは、多くの場合、対応する抽象クラスです。

たとえば、Javaクラスライブラリでは、我々は以下のとおりです。

  • Collectionインタフェースと対応する抽象クラスAbstractCollection
  • Listインタフェースと対応する抽象クラスAbstractList
  • 地図インターフェイスと対応する抽象クラスAbstractMapの

インターフェースクラスの特定の実装に必要な、二つの選択肢があり、一方が他方には、抽象クラスの継承であり、オーバーライドされたメソッドは、必要に応じて、彼らの完全な方法を実現するためのインタフェースを実装することです。

継承の利点は唯一の必要性、少ないコードを記述する必要が、実装が容易に書き換えるために、コードの再利用です。この特定のクラスが親クラスを持っている場合は、あなただけのインターフェイスを実装することを選択することができます。

我々は、嵌合関係のこの他の例を示す、または追加二つのセクションの前述の例で、上部セクションが導入さIADD・インターフェース・コードは以下の通りであります:

public interface IAdd {
    void add(int number);
    void addAll(int[] numbers);
}

次のように私たちは、抽象クラスAbstractAdderを実装し、コードは次のとおりです。

public abstract class AbstractAdder implements IAdd {
    @Override
    public void addAll(int[] numbers) {
        for(int num : numbers){
            add(num);
        }
    }
}

この抽象クラスは、メソッドの追加のメソッドが抽象メソッドであり、Addメソッドを呼び出すことによって達成されるのaddAllを実現するので、IADDインタフェースクラスを達成するために必要、それが直接実装IADDインタフェースを選択することができ、またはクラスAbstractAdderから提供します継承、継承された場合のみ、それを達成するためのメソッドを追加する必要があります。ここでは、元のベースクラス継承AbstractAdder、このようなコードのルックスをしてみましょう:

public class Base extends AbstractAdder {
    private static final int MAX_NUM = 1000;
    private int[] arr = new int[MAX_NUM];
    private int count;
    
    @Override
    public void add(int number){
        if(count<MAX_NUM){
            arr[count++] = number;    
        }
    }
}

4.まとめ
このセクションでは、構文的、抽象クラスが必要ではないが、我々は、抽象的な概念を表現するために使用される特定のクラス、に関して、抽象クラスについて話すが、それは誤用を減らすために、手順をより明確にすることができ、抽象クラス抽象クラスは、デフォルトの実装を提供し、インタフェースは協働しばしば、インタフェースを定義する機能は、便利なサブクラスは、インターフェイスを実装します。

公開された81元の記事 ウォン称賛37 ビュー50000 +

おすすめ

転載: blog.csdn.net/gaolh89/article/details/96693449