抽象クラスと具象クラスの主な違いは、抽象クラスではオブジェクトを作成できないのに対して、具象クラスではオブジェクトを作成できることです。
オブジェクト指向プログラミング(OOP)は、ソフトウェア開発でよく使われるパラダイムです。
実世界のシナリオを容易に開発するのに役立ちます。
さらに、プログラマーはオブジェクトのセットを使用してソフトウェアをモデル化することができます。
これらのオブジェクトは、他のオブジェクトと通信し、メッセージを受け渡します。
さらに、オブジェクトはクラスを使用して作成されます。
具体的なクラスは、デフォルトのクラスです。
OOPの一つの大きな柱は抽象化です。
抽象クラスは、抽象化を実現するための手法です。
抽象クラスとは
OOPの主要な概念の1つに抽象化があります。
これは、内部の詳細を隠して、ユーザーに機能だけを表示することです。
抽象クラスは、抽象化を実現するための手法の一つです。
Javaなどのプログラミング言語では、抽象クラスを表すのにabstractキーワードを使用する。
抽象メソッドとは、実装を持たないメソッドのことである。
また、抽象クラスは、抽象メソッドと非抽象メソッドを持つことができる。
クラスは、抽象クラスを拡張することができる。
そして、抽象クラスの抽象メソッドに対する実装を提供することができます。
さらに、抽象クラスは、コンストラクタと静的メソッドを持つことができます。
抽象クラスからオブジェクトを生成することはできません。
しかし、プログラマは抽象クラスを拡張したクラスからオブジェクトを生成することができます。
抽象クラス内の抽象メソッドが final と宣言されている場合、抽象クラスを継承するクラスはその抽象メソッドの実装を提供することができません。
図1: Shapeクラス
図2: Squareクラス
Shapeは抽象クラスです。
draw という抽象メソッドと、display という非抽象メソッドを持っています。
さらに、Square クラスは Shape を継承しています。
したがって、SquareクラスはShapeクラスの抽象メソッド(draw)を実装したものを提供することができる。
図3: メインクラス
mainメソッドの内部でSquareのオブジェクトが生成されています。
そして、そのオブジェクトを使ってdrawメソッドを呼び出す。
コンソールに “Square “と表示されます。
コンクリートクラスとは
具体的なクラスとは、未実装のメソッドを持たないクラスのことです。
Javaなどのプログラミング言語では、クラスを表すのにclassキーワードを使用する。
具象クラスは、オブジェクトを作成するための設計図です。
具体的なクラスは、属性とメソッドを持つ。
属性はプロパティやデータを表し、メソッドはクラスの振る舞いを表します。
これらの属性とメソッドは、クラスのメンバとなります。
図4: 具体的なクラス
上の図は、Rectangleという具象クラスです。
ここでは、長さと幅という2つのプライベート属性を持っています。
また、Rectangleというコンストラクタを持ち、属性に初期値を与えている。
さらに、displayAreaというメソッドもあります。
さらに、このクラスはmainメソッドも持っています。
mainメソッドの中では、rectangle(r)のオブジェクトが生成され、値5と4がコンストラクタに渡される。
さらに、コンストラクタでは、長さに値5を、幅に値4を代入しています。
最後に、そのオブジェクトを使って displayArea メソッドを呼び出す。
これは、コンソールに矩形の面積を表示します。
抽象クラスと具象クラスの違い
定義
抽象クラスとは、抽象メソッドと非抽象メソッドを集めた抽象キーワードで宣言されたクラスであり、具象クラスとは、newキーワードでインスタンスやオブジェクトを生成できるクラスです。
これが、抽象クラスと具象クラスの大きな違いです。
オブジェクトの作成
プログラマーは抽象クラスを使ってオブジェクトを作成することはできませんが、具象クラスを使ってオブジェクトを作成することはできます。
メソッド
抽象クラスは未実装のメソッドを持ちますが、具象クラスはすべてのメソッドが実装されています。
結論
簡単に説明すると、ソフトウェア開発における主要なパラダイムはOOPであり、OOPに関連する概念として、抽象クラスと具象クラスがあります。
抽象クラスと具象クラスの主な違いは、抽象クラスではオブジェクトを作成できないのに対して、具象クラスではオブジェクトを作成できることである。