• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:コンストラクタの種類について教えてください!!)

コンストラクタの種類について教えてください!!

このQ&Aのポイント
  • コンストラクタの種類にはデフォルトコンストラクタ、引数を持たないコンストラクタ、引数を持つコンストラクタがあります。
  • LinearLayout ll = new LinearLayout(this)の部分では引数ありのコンストラクタが呼ばれますが、LinearLayout ll = new LinearLayout()のときは引数なしのコンストラクタが呼ばれます。
  • デフォルトコンストラクタが呼ばれるときの記述式はコンストラクタ名の後ろに()を付ける形式です。

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.3

>>このときプログラマが引数のないコンストラクタを書かなかったならば、上記の構文は引数のない場合の A インスタンス生成方法がないためコンパイルエラーとなります。 > →この場合はJava側が用意するデフォルトコンストラクタが呼ばれるためコンパイルは成功するのでは? 残念ながらそうなりません。 たとえば、 class B {  public B(int i) {}  // public B() がない }   …… B b = new B(); というコードはエラーになります。 この場合、プログラマは引数のないコンストラクタを書いていませんが、コンストラクタ自体は書いているため、Java はデフォルトコンストラクタを用意しません。したがって、引数がないコンストラクタをプログラマと Java との両方とも定義していないため B を引数なしで生成することはできません。 > つまりA a = new A();において呼ばれるコンストラクタはプログラム側が引数なしのコンストラクタを定義していた場合はそれが呼ばれ、定義していない場合はJava側が用意するデフォルトコンストラクタが呼ばれると理解してよろしいでしょうか? 上記の文は、「定義していない場合は」の前に「引数付きのものを含めてプログラム側が一切のコンストラクタを」が入ると正しくなります。引数なしのコンストラクタは書いていないが引数付きのものは書いている場合は最初に書いた通りです。

tomotomo2012
質問者

お礼

理解できました!!こんな夜おそくまでお付き合いありがとうございました!!

その他の回答 (2)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

#1. の回答者ですが、その補足について。 > Aクラスに引数のないコンストラクトがありますと、そのコンストラクトが呼ばれ、Aクラスにコンストラクトが存在しないとデフォルトコンストラクトが呼ばれるのでしょうか? この部分はそのとおりです(語句が間違ってますが)。 しかし、 > つまりA a = new A();の式でもAクラスのコンストラクタが存在するかしないかで2通りの呼び方があるということでいいのでしょうか? の部分は勘違いしています。 A a = new A(); と書いたとき、呼ばれるのはあくまでも引数のないコンストラクタです。 プログラマが何らかのコンストラクタを書いたならばそのうちで引数のないコンストラクタが呼ばれます。このときプログラマが引数のないコンストラクタを書かなかったならば、上記の構文は引数のない場合の A インスタンス生成方法がないためコンパイルエラーとなります。 プログラマがコンストラクタを一切書かなかった場合は Java が引数のないコンストラクタを用意してそれを呼びます。 この Java が用意した引数のないコンストラクタのことをデフォルトコンストラクタと呼んでいるだけで、インスタンス生成するときにはそのとき使用するコンストラクタがデフォルトかプログラマが書いたものかの区別はありません。

tomotomo2012
質問者

補足

回答ありがとうございます!! 気になる部分があるのですが このときプログラマが引数のないコンストラクタを書かなかったならば、上記の構文は引数のない場合の A インスタンス生成方法がないためコンパイルエラーとなります。 →この場合はJava側が用意するデフォルトコンストラクタが呼ばれるためコンパイルは成功するのでは? つまりA a = new A();において呼ばれるコンストラクタはプログラム側が引数なしのコンストラクタを定義していた場合はそれが呼ばれ、定義していない場合はJava側が用意するデフォルトコンストラクタが呼ばれると理解してよろしいでしょうか? また回答をいただけるとありがたいです!

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

A a = new A(); ただし、Aにコンストラクタを一切記述していないとき。

参考URL:
http://www.javadrive.jp/start/constructor/index4.html
tomotomo2012
質問者

補足

すみません A a = new A(); を例にとりますと Aクラスに引数のないコンストラクトがありますと、そのコンストラクトが呼ばれ、Aクラスにコンストラクトが存在しないとデフォルトコンストラクトが呼ばれるのでしょうか?つまりA a = new A();の式でもAクラスのコンストラクタが存在するかしないかで2通りの呼び方があるということでいいのでしょうか?

関連するQ&A

専門家に質問してみよう