No.1
- 回答日時:
複数のクラスに、まったく同一のメソッドが存在することを保証できる、ということでしょうか。
単に「メソッドがある」ということでなく、保障される、という点です。たとえば、あるクラスAに「func」というメソッドを用意したとします。これを、その他のクラスから呼び出してfuncを利用する場合を考えてください。抽象クラスを継承して作っても、そうでなくても、基本的には同じですね。newでインスタンスを作り、funcを呼び出す。この時点では、違いはほぼありません。
では、このfuncを実装したクラスBを新たに作る必要ができたとしましょう。そして、これらのクラスを利用するクラスも作成をします。ただし、ここでは「クラスAとBのどちらが渡されるかは、その場にならないとわからない」とします。このとき、どうやってこの処理を作りますか?
抽象クラスを使えば簡単です。抽象クラスXを作成し、これを継承してクラスAとクラスBを作ります。利用する側は「クラスXのfuncを呼び出す」という形で処理します。これは、クラスAが渡されてもBが渡されても、まったく問題なく動きます。もちろん、新たにクラスCやDが増えても、プログラムを修正する必要はまったくありません。
まぁ、同様のことはインターフェイスでもできるわけですが、このように「メソッドを保障したクラスを複数作成する」というような場合、抽象クラス(や、インターフェイス)は便利なのです。
No.2ベストアンサー
- 回答日時:
抽象クラスを使うということは、抽象クラスのメソッドは実装しないってことです。
普通のクラスを継承する場合は、オーバーライドする親クラスのメソッドは実装しなければコンパイルエラーになります。
空実装をしておけばいいですが、実際に実装する立場からすると抽象化しておくことで、明示的に実装させることができます。
「オーバーライドを忘れない」というメリットは、決してパンチが弱いものではありません。
自分で抽象クラスを作って、自分で実装をするならそう思うかもしれませんが、フレームワークとして公開することによって、その実装を知らなくても安全に使えるということにつながります。
No.3
- 回答日時:
例えば、以下のような日常的で具体的な問題のオブジェクト構造を
考えてみて頂ければ抽象クラスの恩恵を実感できると思います。
interface 乗り物
get車軸長();
get重量();
get定員数();
get車輪数();
abstract class 二輪車 implements 乗り物
get定員数(){ return 1 };
get車輪数(){ return 2 };
abstract class 大型二輪 extends 二輪車
get定員数(){ return 2 };
class 郵便自転車 extends 二輪車
get車軸長(){ ... };
get重量(){ ... };
class 原動機付自転車 extends 二輪車
get車軸長(){ ... };
get重量(){ ... };
class 白バイ extends 大型二輪
get車軸長(){ ... };
get重量(){ ... };
抽象クラスが無かったら、まさに日常的に抽象的な二輪車というような
クラスを書き表すことができなくなってしまうという事です。
これは、郵便自転車も原動機付自転車も、二輪車の一種ですが
抽象クラスが無かったら、継承したインターフェースのメソッドを
それぞれのクラスに(同じ内容を含めて)一次元的に
全て羅列するか、全てを実装した具象クラスを継承するしか
方法がなくなります。
抽象クラスの存在によってインターフェースを実装するときの
利便性が増し、クラス構造の見通しが良くります。
>オーバーライドする事を忘れない、というメリットでは
>パンチが弱い気がします。
これは、インターフェースの存在意義であって、抽象クラスの
存在価値は違うと思われます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Chromeのデベロッパーツール プログラム 2 2022/06/21 20:27
- 哲学 多重統括主観形相の育成(形式学) 1 2023/07/05 12:50
- その他(Microsoft Office) 計算式を教えて下さい。 出荷明細を作成しています。 前日にあって当日にないものを抽出したいです。 ( 1 2023/05/05 23:15
- 電気・ガス・水道 ホンダジェット 翼を上につけてエンジンを下にすれば? 2 2022/12/25 10:47
- 工学 ホンダジェット 翼を上につけてエンジンを下にすれば? 6 2022/12/26 12:43
- 政治 選挙はランダム投票でするべきだろう。 ランダム投票とは、国民から無作為に投票者を抽出する投票制度。 4 2022/06/24 17:09
- 教育・文化 教員をめざしている者です。以前教育実習で小学校に行った時、なんでもない会話から子供達にある国が嫌いと 13 2023/08/24 12:19
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- Access(アクセス) Access で半角スペースと全角スペースの区別について 3 2022/11/05 23:54
- 哲学 曖昧な言葉 4 2022/11/17 21:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムの組み立てについて
-
Javaコレクションフレームワー...
-
インターフェースとは
-
インターフェースの利点は?
-
抽象クラスとインターフェース...
-
インタフェースのstatic変数(Java)
-
クラスは関数の寄せ集め??
-
オブジェクト指向 ボールの衝突
-
抽象クラスとインタフェースの...
-
WEBサイトを訪れたときの通知の...
-
System.Collections.Generic.Li...
-
エクセルVBAで、条件に一致する...
-
3年間同じクラスになる確率
-
インスタンス参照でアクセスで...
-
c++,ある関数のクラスから別の...
-
ワイルドカード<?>と型パラメー...
-
「天声人語」をインターネット...
-
DataGridViewでセルクリックイ...
-
string formatについて
-
クラス間でのデータ参照
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
「ラッパークラス」の存在意義...
-
ASP.NETでの共通コードの書き方...
-
JTextFieldの入力制限
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
c++でのヘッダーファイルの循環...
-
【C#】クラスのコンストラクタ...
-
「IOException は対応する try ...
-
ファイルパスが取得出来ない(P...
-
メソッドの引数にクラス名を渡す
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
vb.net 自作プロパティの削除に...
-
なぜインタフェースを使うのか?
-
VBがオブジェクト指向言語でな...
おすすめ情報