お世話になります。
abstract クラスについて質問させて下さい。
例えば、以下のような場合、
abstract class ErrorC {
abstract boolean errorKind( );
public void logOut( ) {
//ログを記録する処理を記述する
}
}
class DbError extends ErrorC {
boolean errorKind( ) {
//DB エラーが起こった時の処理を記述する
logOut( );
}
}
class IoError extends ErrorC {
boolean errorKind( ) {
//入出力エラーが起こった時の処理を記述する
logOut( );
}
}
・ErrorC クラスではエラーの種類に関わらず、ログを記録する処理を
記述する。
・それ以外の個々のエラー毎の処理は各サブクラスに具体的な処理を
実装させる。
ということで、プログラミングの作業量が軽減される等の利点は理解できる
のですが、それを実現するには、普通にクラスの継承を行えばいいような
気がするのです。
abstract クラスがどういうものなのか、ということは何となく理解できたのですが、
それを使用する利点が分かりません。
ご教授宜しくお願い致します。
No.2ベストアンサー
- 回答日時:
abstractの存在意義は、「そのクラスのインスタンスの生成を禁止する」ことにあります。
ErrorCにabstractがつかないと、「ErrorCのインスタンス」を作ることが「できて」しまいます。
まあ作れてもかまわない場合もあるのですが、作りたくない場合も多々あります。
この場合だとErrorCのインスタンスが発生すると、
「あなたいったい何のエラーなの」
「いや、決まってないんだけど、とにかくエラーなんです」
「とにかくエラーじゃ困るよ。エラーだったら何のエラーか言ってもらわないと」
「いやほんとに単なるエラーで、何の種類のエラーか決まってないんです」
ということになります。
No.3
- 回答日時:
最近abstractクラスを使っていて気づきました.
他人のソースを見るとき,abstractクラスを見ると一通りそのクラスの機能がわかる.
もう1つ,代表となる働きをするクラスをabstractにすると,他でその働きをするクラスを複数個作ったときに統一しやすい.
見当外れかな!?(゜ロ゜;)
ranxさん、liar_adanさん、shotaro777さん、ご回答ありがとうございました。
お礼が遅くなりましたことと、まとめてのご報告、失礼ですがお許し下さい。
おかげさまで、自分なりにいろいろと演習問題を解いてみた結果、
なんとなくですが、abstract クラスを使用する利点が分かりました。
(所詮演習レベルですが)
実際に現場で開発、となると、当然セキュリティの問題も深刻な問題に
なるでしょうし、アクセスレベルのことも掴み易くなるのでしょうね。
独学ですと、ついつい、「動いたからいいや」になってしまって…。
でも、これからも頑張って学習していこうと思います。
ご教授ありがとうございました。
No.1
- 回答日時:
質問の例で、ErrorCクラスがabstractクラスで無い場合、
つまりErrorCクラスにabstractメソッドが宣言されていない場合、
次のような記述はできません。
class CertainClass{
void doWithError(ErroC certainError) {
boolean judge = certainError.errorKind();
.....
}
}
certainErrorが具体的にどのようなエラーなのかは分かりませんが、
それでもerrorKind()というbooleanを返すメソッドがあることは
分かっているので、それが利用できるわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP アップロード画像数でCSSを分けることに成功したのですが、画像の横に文字を並べることが出来ません。 3 2023/07/28 17:16
- Visual Basic(VBA) セルS2に入力した「月」と一致したB列の右隣へセルS110の値を転記する下記マクロを実行するとエラー 2 2022/12/06 17:32
- 情報処理技術者・Microsoft認定資格 応用情報処理技術者試験のシステム利用率の計算について 2 2022/03/28 07:43
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- Java リレーションエンティティクラスとは何ですか? 2 2023/02/10 00:02
- Visual Basic(VBA) エクセル VBAで複数セル選択時エラーになる問題 3 2022/10/04 02:40
- Visual Basic(VBA) VBA リボンののリカバリーでオーバーフローエラーになります 2 2023/07/04 19:07
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
コンパイル時にエラーが出てし...
-
タグが閉じてないというエラー...
-
eclipseでのsvn認証エラー回避方法
-
構文エラーのやり直しについて
-
tomcat起動時エラー
-
致命的: StandardServer.await:...
-
エラー:org.springframeworkが...
-
Javaのエラーについてです
-
java eclipse キーボード入力
-
JAVAでアルファベットを数...
-
eclipseでのライブラリの追加に...
-
Javaのエラーについて
-
JavaのUDP通信を使用した簡易チ...
-
JSPのIF文を教えて下さい
-
Eclipseの環境について
-
JSP内でString型からint型に変...
-
JSPの表示時エラー
-
メモリリーク(?)時にSQLExce...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
tomcat起動時エラー
-
エラー:org.springframeworkが...
-
Javaのエラーについてです
-
eclipseをバージョンアップした...
-
eclipseでのsvn認証エラー回避方法
-
タグが閉じてないというエラー...
-
Eclipseで次のエラー箇所にジャ...
-
JBossについて
-
構文エラーのやり直しについて
-
Eclipseの環境について
-
JSP NullPointerException
-
javaw.exeプロセスが正常起動し...
-
JSP内でString型からint型に変...
-
マイクラでBuildcraftを入れる...
-
Win32コンソールアプリでnamesp...
-
JSPのコンパイル?
-
致命的: StandardServer.await:...
-
S2daoのSqlファイルでのDBア...
おすすめ情報