• ベストアンサー

interfaceとabstract

takapon32の回答

回答No.1

abstractはクラスですから、多重継承ができません。 これに対してinterfaceの場合複数実装することができます。 × class A extends B, C {...} ○ class A implements B, C {...} ○ class A extends B implements C, D {...} したがって、すでに他のクラスから継承されている可能性があるクラスに対して、ある性質を追加しよう、というときにはinterfaceの方が向いていることになります。 一方、interfaceに定義されているメソッドはすべてabstractメソッドであるのに対して、abstractクラスに定義されているメソッドはabstractでないメソッド(すなわち実装されたメソッド)を含めることができます。 ○ abstract class X{  public void baa() {...}; } × interface X{  public void baa() {...}; } ○ interface X{  public void baa(); // interfaceでは暗黙のうちにabstractメソッドとなる } ということで、すでに実装されたメソッドを用意しておきたい場合はabstractクラスを使うと便利です。

northcurlcurl
質問者

補足

合っているかどうか分かりませんが…、 例えば”人間”というクラスで視覚クラス、聴覚クラ ス、等々を実装したい場合、Javaでは多重継承が出来な いため、視覚クラス、聴覚クラス、等々をinterfaceで 宣言することによって、これらの定義を人間クラスで使 用することが出来る、という考えでよろしいのでしょう か。言ってみれば、多重継承をするためには、 interfaceを使うというような…?

関連するQ&A

  • アブストラクトとインターフェースの簡単な一例文

    JAVAについて質問よろしくお願いします。 abstract抽象クラスとインターフェースについて下記理解なのですが、超かんたんな一例など欲しいのですが何かないでしょうか。たとえば package round1.chapter1; public class Helloworld { public static void main(String[] args) { System.out.println("こんにちは!"); } } というような一文です。 ~私の理解~ アブストラクトとは、違ったクラス内で同一メソッドがある場合は親クラスに置き、違ったメソッドがある場合は抽象クラスとして親クラスに置いて、実装はサブクラスに任せるという形式で使われる言葉 インターフェースとは、機能だけを仕様書として書いておき、定義されたとおりのメソッドを実装しないといけないという呼び出し方の統一を図る際に使われるメソッド置き場 ~~~~~ このふたつについてものすごく簡単な使用例を頂きたいです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • interfaceを実装するとは?

    interfaceを実装するとはどういうことですか? abstractはクラスの継承で 学校 -abstract(拡張)― 教室 ―abstract(拡張)― 生徒 と機能を細分化するものとわかりました。 インターフェースってなんですか・・

  • abstractなClassについて

    (1)abstractなClassはabstractなmethodを持っていてもnewすることができる。 (2)(1)のabstractなClassを継承したClassは、(1)のabstractなmethodを実装しないとnewすることができない。 この認識は正しいでしょうか?

    • 締切済み
    • PHP
  • コンストラクタ,interface,abstractの呼び出し順について

    現在、java初心者入門などの本で勉強しております 下記についてご教授お願い致します コンストラクタ、interface、abstractの呼び出し順について質問なのですが、 下記プログラムを実行したところ(同一のパッケージ内に明記) // インターフェイス public interface interFaceClassSS {    public void show(); } public interface interFaceClassS {    public void show(); } // 抽象クラス public abstract class ClassSSSab {    // 共通のメソッドを実装    //個々のメソッド    abstract void show(); } // スーパークラス public class ClassSSS extends ClassSSSab{    public ClassSSS(){       System.out.println("ClassSSS");       show();    }    public void show(){       System.out.println("ClassSSSabの抽象メソッドを実装");    } } public class ClassSS extends ClassSSS implements interFaceClassSS {    public ClassSS() {       System.out.println("ClassSS");       show();    }    public void show() {       System.out.println("interFaceClassSSを実装");    } } // メイン処理 public class ClassS extends ClassSS implements interFaceClassS {    public ClassS() {       System.out.println("ClassS");       show();    }    public static void main(String[] args) {       new ClassSSS();       System.out.println("");       new ClassSS();       System.out.println("");       new ClassS();    }    public void show() {    System.out.println("interFaceClassSを実装");    } } // 結果 ClassSSS ClassSSSabの抽象メソッドを実装 ClassSSS interFaceClassSSを実装 ClassSS interFaceClassSSを実装 ClassSSS interFaceClassSを実装 ClassSS interFaceClassSを実装 ClassS interFaceClassSを実装 の結果となりました。 当方が望む結果は、 ClassSSS ClassSSSabの抽象メソッドを実装 ClassSSS ClassSSSabの抽象メソッドを実装 ClassSS interFaceClassSSを実装 ClassSSS ClassSSSabの抽象メソッドを実装 ClassSS interFaceClassSSを実装 ClassS interFaceClassSを実装 上記となります。 new ClassSSSの処理は当方が望む結果なのですが、 new ClassSSでは、 newClassSSSの結果に ClassSS interFaceClassSS が追加されると理解していたのですが、結果は、 違っておりました。 どこに誤りがあるのが、数日検討したのですが、分からない状態です。 ご教授の程お願い致します。

    • ベストアンサー
    • Java
  • javaのabstractの意味

    javaのabstractの意味 abstract class Factory { abstract ClassA createClassA(); } createClassA()メソッドは定義していません。 abstract ClassA createClassA();の意味はなんですか?

  • Javaのabstractについて

    Javaのabstractメソッドは、確か中身がないメソッドということで、オーバーライドしないと呼び出すことができないんではなかったでしょうか・・。 それなのに、javax.xml.DocumentBuilderFactoryクラスのnewDocumentBuilderメソッドって、abstract宣言でも呼び出したらちゃんとDocumentBuilderが返るみたいなんですけど、これ如何に。

    • ベストアンサー
    • XML
  • インターフェイスとインタフェース

    タイトルにもありますインターフェイスとインタフェースですが、正式にはどちらが正しいのでしょうか?なにか正式な書物はあるでしょうか?

  • abstract と static を一緒に付けることはある?

    抽象クラスの抽象メソッドにstaticを付ける(abstract と static をメソッドに一緒に付ける)ことはありますか? 例えば、 abstract class Super {  static abstract void meth(); } class Sub extends Super {  static void meth() {   System.out.print("hello");  } } として、mainの中に  Sub.meth(); を書いてみたのですが、普通にコンパイルは通りhelloが出力されます。 staticの意味を考えると、こういうことをするのは意味がないと思うのですが、独学なので身近に聞ける人もいません。 御教授よろしくお願いします。

  • アブストラクトとイントロダクションについて

    こんにちは、 論文を書く際、アブストラクトとイントロダクションにはどのようなことを書けばよいのでしょうか?両者の違いは何でしょうか?

  • HashMapの容量圧縮について

    初期サイズがわからない状態でHashMap(Hashtableでも可)を作成し、HashMapの容量を圧縮する方法などありますか? ArrayListのTrimToSizeメソッドのようなものがあったらいいのですが、ご存知でしょうか?