- ベストアンサー
抽象クラスのメリット
抽象クラスを作成して、オーバーライドするならば、 普通のクラスを作成してオーバーライドしても同じ ではないでしょうか。 オーバーライドする事を忘れない、というメリットでは パンチが弱い気がします。 他に抽象クラスを使用する事によってのメリットは ありますでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
その他の回答 (2)
- HarukaV49
- ベストアンサー率53% (48/89)
関連するQ&A
- 抽象メソッド、抽象クラス
C#を勉強しております。Javaにも同じ機能がありC#のカテゴリーがない為こちらで質問させていただきます。抽象メソッドや抽象クラスを使う利点に関してです。 これらを使う利点を調べたところオーバーライドさせられると書いてありました。オーバーライドしないと 実装がないのでエラーになると書いてありました。その点は理解できたのですが何故基本クラスで実体のない定義をする利点がよくわかりません。それなら最初から派生クラスの方にメソッドを定義すればいいのではという考えになりました。 抽象メソッドとして実体のない定義を行う利点なるものを教えてください。 よろしくお願いします。
- 締切済み
- Java
- 抽象クラスのオブジェクトを生成できない理由は?
・抽象クラスは、なぜ(オーバーライドしないと)オブジェクトを生成できないのでしょうか? ・インタフェースみたいに、抽象メソッドしか宣言することができないなら話は分かるのですが… ・抽象メソッドでない普通のメソッドを実装できるのなら、オブジェクトを生成してくれても良いと思うのですが… ・そういう問題ではない?
- ベストアンサー
- Java
- インターフェイスと抽象クラス
なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。
- ベストアンサー
- Java
- 抽象クラスの継承について
すいませんがご教授下さい。 ASP.NETとVB.NETを使用してアプリを開発しています。 存在するクラスは以下のようなクラスです。 (WebForm1.aspxとWebForm1.aspx.vbとClass1.vb(抽象クラス)があります。) したい事はClass1.vbをWebForm1.aspx.vbが継承したいのですが継承させた後にWebForm1.aspxを開こうとすると「Webフォームデザイナにファイルを読み込めませんでした。・・・・」とエラーポップアップが表示されます。「はい」でHTMLは見れるのですがデザインはタブ自体がないです。普通のクラスを継承させると問題ないのですが。抽象クラスだとエラーになります。 対処方を教えて下さい。
- 締切済み
- Microsoft ASP
- UMLモデリング:抽象クラスを導入すべきかどうか
オブジェクト指向設計に詳しい方,UMTP L3合格者の方,下記のような状況でクラスA1とクラスA2に抽象クラスAを導入するべきかしないべきかについて教えてください。 1 A1とA2に共通の属性は少ない。 2 ある抽象クラスBのサブクラスB1がA1に対する関連を持ち,B2がA2に対する関連を持つ。 また,これらの関連のロール名は同じ。 3 他の複数のクラスがサブクラスA1またはA2に対して関連を持っている。 1に関して:共通化できる箇所が少ないので抽象クラスを導入するメリットはないと思います。 2に関して:抽象クラスを導入することで,A1→B1とA2→B2の関連をA→Bの関連に纏められます。 3に関して:個々のサブクラスを意識する必要があるので抽象クラスを導入するメリットはないと思います。 抽象クラスを導入するメリットは,2に記載の関連を纏められるという点だけだと思いますが,まとめて良いかどうか疑問に思っています。A1->B2やA2->B1が許されないので,A->Bに纏めてしまうとモデルの意味が曖昧になりますし,コンパイル段階でA1->B2のような不正な組み合わせを検出できなくなります。しかし,Factoryとかを使って正しい組み合わせだけが生成されるようにすればよいので纏めるべきでしょうか。ロール名が同じなので,生成時だけ気をつければ同じ型で扱える方が良いようにも思います。 ちなみにこれはUMTP L3で出題された問題なのですが,細かい条件が提示されてなくて,Factoryの使用を前提にしてよいかは記載されていませんでした。記載がないということは前提にしない方が良いといことだと理解しています。 A1とA2はBから同じロール名で誘導されるという点を除けば,A1とA2は違う概念を表していると思います。A1とA2を独立したクラスにしておくべきか,抽象クラスで纏めるべきか教えてください。 宜しくお願いします。
- 締切済み
- Java
- 抽象クラスをJUNITでテストする方法
抽象クラス内に実装メソッドと抽象メソッドがある場合に、 そのクラスをJUNITでテストしたいと思っています。 通常のクラスであれば、そのクラスに対するテストクラスを 作成して、テストクラス内でテスト対象クラスをnewして テストケースを記述していくと思いますが、 上記のような抽象クラスの場合は、 どういった形でテストクラスを作成すれば良いのでしょうか? 抽象クラスはnewできないので、 抽象クラスを実装したクラスをまず作成して そのクラスに対するテストクラスを作成するのでしょうか? お薦めの方法や一般的な方法があれば教えてください。 以上、よろしくお願い致しますm(__)m 【環境】 JDK1.4.2 JUNIT3.8.1
- ベストアンサー
- Java
- インターフェイス 抽象クラス
PHP初心者です。 xampp1.7.0(最新)でアパッチなど一括ダウンロード クラスの概念は分かりましたが、インターフェイス、及び抽象クラスについて理解が追い付きません。 下記コードをご覧ください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ <? abstract class AbstractClass { abstract public function test1(); } class Impl1 extends AbstractClass { public function test1() { print "こんにちは\n"; } } class Impl2 extends AbstractClass { public function test1() { print "ありがとう.\n"; } public function hoge() { print "さようなら\n"; } } $i1 = new Impl1(); $i1->test1(); $i2 = new Impl2(); $i2->test1(); ?> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 抽象クラスが上にありますが、中身がないので継承し、そのクラスの中で処理させています。抽象クラスの必然性が理解できません。まあこのコード事態がものすごく短いので、その必然性がないと思うのですが、例えばもっと長いコードになったときなどは抽象クラスは絶対使った方がいいということになるのでしょうか。 さらに全て抽象クラスであればインターフェイスを利用できるようですが、インターフェイスのメリットにつき理解が追い付きません。 どなたかご教授お願いいたします。
- ベストアンサー
- PHP
- 抽象クラスについて<Java>
「抽象クラス」は一体何のためにあるのか教えてください。どのような場面で使用するとその効力が味わえるのかも教えていただきたいです。具体的に分かりやすい例を挙げて説明してくれるとうれしいです。 非常に困ってますので、よろしくお願いします!!
- ベストアンサー
- Java
- 抽象クラスからオーバーライドについて
EclipseでJavaを勉強始めました。 抽象クラスからオーバーライドするところで質問致します。 抽象クラスとして、「面積を計算する」というメソッドをもつDiagramクラスを定義しました。それを継承して、「四角形の面積を計算する」というメソッドをもつSquareクラスと、「三角形の面積を計算する」というメソッドをもつTriangleクラスを定義しました。 Squareクラス、Triangleクラスからインスタンスを生成して、四角形、三角形の面積をコンソールに表示させるという簡単なプログラムです。 このとき、main関数と3つのクラスの関係についてお尋ねします。 (1)iagram.java、Square.java、Triangle.javaそれぞれにクラス定義とmain関数を持たせるパターン public abstract class Diagram { // 面積計算定義(抽象メソッド) public static void main(String[] args) { } } public class Square extends Diagram{ //四角形の面積の計算定義 public static void main(String[] args) { //四角形の面積の計算と表示 } public class Triangle extends Diagram{ //三角形の面積の計算定義 public static void main(String[] args) { //三角形の面積の計算と表示 } (2)sample.javaというファイルにまとめ、その中にこの3つのクラス定義とmain関数を一つ持たせるパターン public class sample { public static void main(String[] args) { //四角形の面積の計算と表示 //三角形の面積の計算と表示 } } abstract class Diagram { // 面積計算(抽象メソッド)定義 } class Square extends Diagram{ //四角形の面積の計算定義 } class Trapezoid extends Diagram{ //三角形の面積の計算定義 } この二通りを考えて、どちらも実行できたのですが、どちらの方がJavaらしいプログラムと思われますでしょうか?
- ベストアンサー
- Java