25

サブクラスを作成するために、Javaで抽象クラスが必要な理由を理解しています。しかし、具象クラスでも同じことが実現できます。たとえば、Class Child は Parent を拡張します。ここで、親は抽象的かつ具体的である可能性が非常に高くなります。では、なぜ ABSTRACT があるのでしょうか??

4

7 に答える 7

55

抽象クラスを直接インスタンス化することはできません。クラスを抽象として宣言するということは、クラスをインスタンス化したくないことと、クラスを継承することしかできないことを意味します。コードにルールを課しています。

親子関係の例をさらに拡張してPersonクラスを含める場合は、Personが抽象的であることが理にかなっています。親は具体的な考えであり、子供も同様です。人は、コードだけでなく現実においても抽象的な概念です。

1つの利点は、抽象クラスの概念を明示的に定義して保護することです。クラスを抽象として宣言する場合、あなたやあなたのコードを使用している他の誰かがそれをインスタンス化することによってそれを誤って使用する方法はありません。この理由は、関数とフィールドをpublic、private、またはprotectedとして指定する理由と似ています。関数またはメンバーをプライベートとして宣言すると、クライアントコードからの不適切なアクセスから事実上保護されます。プライベートはクラス内で使用されることを意図しており、それだけです。抽象クラスは継承されることを意図しており、それだけです。

さて、抽象クラスを使用して、関数とフィールドをパブリックではなくプライベートとして定義する必要がありますか?いいえ、しません。ただし、これらの概念は、コードをクリーンで整理された状態に保つために提供されています。私の知る限り、抽象クラスはすべてのオブジェクト指向言語で実装されています。周りを見回すと、C ++、C#、VB.NETなどすべてがこの概念を使用していることがわかります。

より良い、具体的な例:

形状階層UML図

上記の例では、Shapeクラスはそれ自体では役に立たないため、抽象的である必要があります。

于 2012-04-18T14:19:56.353 に答える
10

抽象クラスとは、完全ではなく抽象であることを意味します。それおよび/またはその機能を完了するには、別のクラスが必要です。抽象クラスを拡張する必要があります。特定のクラスで役立ちます。果物 すべての果物は、色のような同じ特性を持っています。ただし、オレンジのように果肉が多いか、バナナなどではないかなど、果物ごとに異なる特性を持つことができます。

于 2012-04-18T14:23:50.523 に答える
3

抽象化のポイントは、サブクラスを作成しないことです。それは、コード内で Seams を作成することです。保守性という最終目標につながる、コードをテスト可能にし、分離する必要があります。同様の理由で、抽象化によって、波及する副作用なしにコードの一部を置き換える能力も得られます。

于 2012-04-18T14:25:54.760 に答える
3

抽象クラスは、他のクラスの派生元となる基本クラスとして使用されることを意図しています。派生クラスは、基本クラスに実装されていないメソッドの実装を提供することが期待されています。不足しているすべての機能を実装する派生クラスは、具象クラスと呼ばれます。

于 2016-07-22T05:38:42.530 に答える