3

最近、抽象メソッドは本質的に継承用にマークされたメソッドを作成し、それはブロックレスで、サブクラスの特殊化を待っていることを読みました。さて、私はこれを尋ねます:抽象メソッドを作成し、その継承を許可し、サブクラスバージョンを作成し、対応するスーパークラスメソッドを持たないことと、サブクラスによって/サブクラスでのみ定義されたメソッドを持たないことの違いは何ですか. オーバーライドの原則により、サブクラス オブジェクトは自動的にサブクラス メソッドを使用すべきではなく、対応するスーパークラス メソッドがない場合、サブクラス オブジェクトは常にサブクラス メソッドを使用します。スーパークラスに対応するものがない標準メソッドとは対照的に、抽象メソッドを作成する目的は何ですか。

私の知識には完全な欠陥があり、私の認識をゆがめている可能性があります:-) ありとあらゆる助けをいただければ幸いです

4

3 に答える 3

0

スーパークラスは、抽象メソッドを介してその義務の一部をサブクラスに委任できます。これの利点は、スーパークラスに一般的な再利用可能なロジックのみが含まれ、実装のより具体的な詳細が継承ツリーのサブクラスにプッシュされることです。

この状況では、スーパークラスは、いくつかのメソッドが既に実装されているかのようにアクセスする必要がある場合があります。これが、スーパークラスでボディのない抽象メソッドを定義する必要がある理由です。そうしないと、それらを参照できません!

たとえば、スーパークラスはデータの処理を処理できますが、具体的なサブクラスはさまざまなソースからのデータ入力を処理できます。この場合、スーパークラスとサブクラスは次のようになります。

class DataProcessor {
    public void doWork() {
        Data data = readData();

        processData(data);
    }

    public abstract Data readData();  // this method is here and marked as abstract to make sure that:
                                      // 1. child classes never fail to implement it;
                                      // 2. parent class have a possibility to refer to the method that he is not actually implementing;
                                      // 3. users of parent class have a possibility to refer to the method that parent is not capable of implementing.
}

class FileSystemDataProcessor extends DataProcessor {
    public Data readData();
        // handle data reading from the file system
    }
}
于 2013-05-15T23:53:20.550 に答える