- 締切済み
抽象クラスとインターフェースの使い分け
抽象クラスとインターフェース、この2つの違い、使い分け方が未だにはっきりとはわかりません・・・ 抽象クラスもインターフェースも実装は持たず、抽象クラスはサブクラスで、インターフェースはそれをインプリメントしたクラスで実装を行うのですよね? 両者ともに言わば中身はなく外枠だけ定義されていると言えると思うのですが、だとしたらこの2つの違いや使い分けってどうなるのでしょうか。 抽象クラスでは部分的な実装を含められることや、インターフェースでは実装クラスが全てのメソッドを実装しなければいけない、複数実装できるといった使い方の違いしかないのでしょうか。 だとしたら実際に抽象クラスとして用意するのかインターフェースとして用意するのかの選択基準はなんなのでしょうか。 明確にこういう場合は抽象クラス、こういう場合はインターフェースなどと言った使い分けってあるのでしょうか。
- rhl
- お礼率36% (42/116)
- Java
- 回答数5
- ありがとう数2
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- taktaa
- ベストアンサー率0% (0/3)
ご参考にされて下さい。 抽象クラスはバージョン管理するための単純で簡単な方法を提供します 基本クラスを更新することにより すべての継承クラスに自動的に変更が反映されます 一方、インターフェイスはいったん作成した後は変更できません インターフェイスの新しいバージョンが必要な場合は まったく新しいインターフェイスを作成する必要があります 異なるオブジェクトで利用できる機能を作成する場合は インターフェイスを使用します 抽象クラスは主に互いに密接な関係を持つ オブジェクトに対して使用します 一方インターフェイスは互いに関連性のないクラスに対して 共通の機能を提供する場合に最も適しています
Javaは、多重継承ができません。 あるクラスに複数の機能をもたせたい場合は、抽象クラスとインタフェースを使い分けたりします。 抽象クラスは、実装をもたないわけではありません。 実装をもつこともできるし、抽象化されたメソッドも持ちます。 予め実装しておきたい機能がある場合は、抽象クラスを利用したりします。 実装がない抽象クラスは、インタフェースとほぼ同様です。
- kacchann
- ベストアンサー率58% (347/594)
- neuron-x
- ベストアンサー率52% (139/266)
オブジェクト指向の設計において、インターフェイス、抽象クラスはとても重要な役割を果たしています。 普通に使っている分にはメリットが感じにくいと思うのですが、きちっとした設計を行うようになってくると、色々と役に立ちます。どのようなときにインターフェイス、抽象クラスが効果を発揮するかは、デザインパターンを勉強してみると良いでしょう。 Java初心者だと、デザインパターンは難しいと感じるかもしれません。けれども、設計におけるバイブル(絶対ではない)とも言えるので、勉強しておいて損はないはずです。
- kacchann
- ベストアンサー率58% (347/594)
(Javaの)abstract class =(Javaの)Interfaceの、 ちょっと便利バージョン。 ただし多用が効かない、みたいな?(ホントか?) --- 必読! http://java-house.jp/ml/archive/j-h-b/026674.html#body http://java-house.jp/ml/topics/topics.html#language-interface
関連するQ&A
- インターフェイスと抽象クラス
なかなか理解が難しくて苦しんでいます。 で自分なりに理解したのですが、 抽象クラス→内容に決まっているメソッドと決まっていないメソッドがある場合に決まっていないメソッドを あとからオーバーライドするだけでスーパークラスで定義したすべてのメソッドを利用できる。 これでただしいでしょうか? で、インターフェイスなのですが、この抽象クラスとそっくりなんですが、 (1)変数は定数になる(強制static)(2)メソッドは名前のみの宣言(内容は記述できない) と言うことで、かなり???なのです。 何のために・・・???記述するんでしょうか?? ただひとつメリットがあるとしたら、インターフェイスを実装すると、インターフェイスの配列でインスタンスを 生成出来るということぐらいでしょうか。 そこでちょっとお門違いの疑問かもしれないんですが、 Runnable、やMouselistenerはメソッドの内容が書かれていないのに、 なぜ機能を持たせることが出来るのでしょう??? 認識違い、間違い等ありましたら、教えてください よろしくお願いいたします。
- ベストアンサー
- Java
- 「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」
「インタフェースを実装してそれが持つ抽象メソッドをオーバーライドする」は正しい? はじめまして。Javaのインタフェースに関する質問です。 私はこれまで、インタフェースを使うときは、インタフェースを実装してクラスを宣言し、そのクラス、またはサブクラスでインタフェースがもつすべての抽象メソッドを定義する、と理解していました。 しかし、下の例をみてください。抽象メソッドの定義を、インタフェースの実装の以前で与えています。問題無くコンパイルでき、実行できます。実行結果も以下の通りです。 インタフェースの抽象メソッドへの定義の与え方やその実行のされ方は、メソッドのオーバーライドと同様と思っていましたので、下記のコードでは「クラスBが抽象クラスではありません」や、「インタフェースの抽象メソッドがオーバーライドされていません」などの文法エラーがでると思っていました。 そこで、質問です。 インタフェースが持つ抽象メソッドの定義を与える場所について、または、これに関する説明のあるページなど、何かご存知でしたら教えてください。 ★コード★ interface X{ void show(); } class A{ public void show(){ System.out.println("A"); } } class B extends A implements X{ } public class Main{ public static void main(String[] args){ X x=new B(); x.show(); } } ★実行結果★ >java Main A ★Java環境★ java 1.6.0_21 javac 1.6.0_16
- ベストアンサー
- Java
- 抽象クラスとインタフェースの違いは?
基本的なことかもしれなのですが、疑問に思ったのですが、抽象クラスとインタフェースは、どういう違いがあるのでしょうか? 実際にそれぞれ定義してみるとあまり違いが無いような気がしてしまいます。 「抽象クラスは、抽象データ型を定義するもの」で「インターフェースは、オブジェクトのインターフェースを定義するもの」という解釈でいいのでしょうか? 意味的な違いはあっても実際は、同じもののような気がするのですが、どう違うのでしょうか?
- ベストアンサー
- Java
- インターフェースとサブクラスはどっちを使えばいい?
ある機能Aを持ったクラスを作りたいとき、次の二つの方法があると思います。 (1) サブクラス → 機能Aを持ったクラスを拡張したサブクラスを作る。 (2) インターフェース → 機能Aを実現するメソッドをまとめてインターフェースにし、そのインターフェースを実装するクラスを作る。 これらの使い分けはどうすればよいのでしょうか?つまり、どういうときに(1)を使ってどういうときに(2)を使えばよいのでしょうか? 私が現在思いつく(1)と(2)の違いは以下の二つです。 ・(1)の方法は手軽 ・(1)の方法だと、一つのクラスの拡張しかできない これくらいでしょうか。もっと本質的な違いはあるのでしょうか?
- ベストアンサー
- Java
- インタフェースと抽象クラスの使い方
インタフェースと抽象クラスの違いがいまいちよくわからないのですが、 違いではなく インタフェースにできて、抽象クラスではできないこと、 抽象クラスにできて、インタフェースにはできないこと をお伺いできますでしょうか。 宜しくお願いします。
- ベストアンサー
- PHP
- アブストラクトとインターフェースの簡単な一例文
JAVAについて質問よろしくお願いします。 abstract抽象クラスとインターフェースについて下記理解なのですが、超かんたんな一例など欲しいのですが何かないでしょうか。たとえば package round1.chapter1; public class Helloworld { public static void main(String[] args) { System.out.println("こんにちは!"); } } というような一文です。 ~私の理解~ アブストラクトとは、違ったクラス内で同一メソッドがある場合は親クラスに置き、違ったメソッドがある場合は抽象クラスとして親クラスに置いて、実装はサブクラスに任せるという形式で使われる言葉 インターフェースとは、機能だけを仕様書として書いておき、定義されたとおりのメソッドを実装しないといけないという呼び出し方の統一を図る際に使われるメソッド置き場 ~~~~~ このふたつについてものすごく簡単な使用例を頂きたいです。 よろしくお願いいたします。
- ベストアンサー
- Java
- 抽象メソッド、抽象クラス
C#を勉強しております。Javaにも同じ機能がありC#のカテゴリーがない為こちらで質問させていただきます。抽象メソッドや抽象クラスを使う利点に関してです。 これらを使う利点を調べたところオーバーライドさせられると書いてありました。オーバーライドしないと 実装がないのでエラーになると書いてありました。その点は理解できたのですが何故基本クラスで実体のない定義をする利点がよくわかりません。それなら最初から派生クラスの方にメソッドを定義すればいいのではという考えになりました。 抽象メソッドとして実体のない定義を行う利点なるものを教えてください。 よろしくお願いします。
- 締切済み
- Java
- JAVA:抽象クラスとインタフェースクラスの違い
インタフェースクラスの存在意義がわかりません。 「処理の実体まで実装せず、箱だけ作っておく」という意味では、抽象クラスで良いのでは?と感じます。 (厳密には、インタフェースクラスの方は、継承せずに、複数の実装パターンを分けれるという部分に違いはあると思いますが、ほぼ存在意義がないように感じます。)
- ベストアンサー
- Java
- インターフェイスと抽象メソッドについてお願いします。
PHPの参考書で「抽象メソッド」と「インターフェイス」それに「実装」という言葉が出てきました。 プログラミングが初めてで全然理解できなく困っています。 ・抽象メソッド ・インターフェイス ・実装 上記の意味とメリットなどを教えてください。それとどのような面で使うのかも教えていただけると嬉しいです。 すみませんが、よろしくお願いします。
- ベストアンサー
- PHP