• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaの基本的な質問です)

Javaの基本的な質問

このQ&Aのポイント
  • Javaの基本的な質問についてまとめました。
  • testtestクラスの違いにより出力結果に何が違うのか、抽象クラスの場合はどうなるのかを解説します。
  • インターフェースと抽象クラスの使い方についても触れています。

質問者が選んだベストアンサー

  • ベストアンサー
  • root139
  • ベストアンサー率60% (488/809)
回答No.1

結論からいうと、このケースでは何も違いは有りません。 ただし、変数の型を抽象クラスやインターフェイスにした方が嬉しい場合も有ります。 表示処理を別のメソッドに切り出した場合を考えて見ましょう。 public class testtest { public static void main(String[] args){ taberu a = new taberu1(); //ここが違う taberu b = new taberu2(); //ここが違う display(a, b); // 表示処理は別のメソッドに切出した display(b, a); // 順番を入替えて表示 } private static void display(taberu a, taberu b) { int aaa = a.doit(); int bbb = b.doit(); System.out.println(aaa + " and " + bbb); } } 「順番を入替えて表示」の行は新たに付け加えましたが、もし display メソッドの引数の型が「display(taberu1 a, taberu2 b)」の様に具象クラスになっていたら、別にそれ用の処理を書かなければなりません。また、taberu を継承した taberu3 を新たに作った際には、display を書き換えたり、組合せごとの display を作る必要が出てきてしまうかも知れません。 インターフェースと抽象クラスの違いですが、大まかにいうと下記の様な感じでしょうか。 ■ 抽象クラス ・メソッドの実装や状態(フィールド)を持てる。 ・static メソッドを持てる。 ・1つのクラスは1つの抽象クラスまでしか継承できない。 ■ インターフェース ・メソッドの実装や状態(フィールド)は持てない。  (定数フィールドは持てる) ・static メソッドに関しては何もできない。(シグネチャーの定義もできない) ・1つのクラスはいくつでもインターフェースを実装する事ができる。 変数の型に関してはどちらも違いは有りません。 (本当は具象クラスでも違いは無く、継承階層のどの位置にあるかが重要)

asdfasdf1213
質問者

お礼

読みやすくて丁寧な回答ありがとうございます。 まさに僕の知りたかったことが理解できました。

関連するQ&A

専門家に質問してみよう