ちくやらアーカイブ

このブログは気分よって構成されています。 BGMも気分で流してます。 あなたの忍耐に感謝します。

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告|
  3. トラックバック(-)|
  4. コメント(-)

コンストラクタ

基礎知識として

コンストラクタの修飾子はアクセス修飾子だけがつかえる。
・public
・protected
・なし
・private


それ以外はだめ。
abstract、static、final、synchronized、nativeはだめ。


他に知識として、
・コンストラクタの継承はできない。
・コンストラクタは戻り値を返さない。
・コンストラクタは例外を発行できる。


クラスにコンストラクタがない場合はデフォルトコンストラクタがよばれる。
そのデフォルトコンストラクタではsuper()が自動的に処理される。


デフォルトコンストラクタの修飾子はクラスにあわせられる。
例えばクラスがpublicだったら、デフォルトコンストラクタもpublicになっている。



まずこれをふまえて…



●super()とthis()


全てのコンストラクタの最初の文は
super()またはthis()の呼び出しでなければならない。


class Child extends Parent{
Public Child(){
System.out.println("test");
super();
}
}

はコンパイルエラー。
super()が先にきていないため。



●実行順

サブクラスのコンストラクタを生成した場合、
親クラスのコンストラクタ実行→サブクラスのコンストラクタ実行
という順番になる。

これは、サブクラスのコンストラクタでsuper()が実行されるので。
(ただし、これはsuper()をじぶんで書かなかった場合)


●デフォルトコンストラクタのひっかけ問題


class Parent{
Public Parent(String message){
//
}

Public void printMessage(){
//
}
}

class Child extends Parent{
Public void printMessage(){
//
}
}

class Sample{
public static void main(String [] args){
Parent obj = new Child();
obj.printMessage();
}
}


という問題。
スーパークラスには「コンストラクタがある」が
サブクラスには「コンストラクタがない」。

というソース。


で、Parent obj = new Child();より
サブクラスで呼び出しているが、この時「デフォルトコンストラクタ」が呼び出される。

サブクラスのコンストラクタが呼び出されると
デフォルトコンストラクタの仕様で
「スーパークラスのコンストラクタを呼び出す」ことになっているが、
デフォルトコンストラクタは「引数無しのスーパークラスのコンストラクタ」をよびだそうとする。
つまりsuper();が実行される。


が、スーパークラスには「引数ありのコンストラクタ」があるため、
コンパイルエラーが発生する。



スーパークラスとサブクラスの問題で
スーパークラスにコンストラクタがあった場合は、このひっかけがでやすい。




あと、こんな問題もあり。

class Sample{
public Sample(){
}

void Sample(){
}
}


これはアリ。
void が戻り値型だからコンストラクタではなくメソッド扱い。
メソッド名とコンストラクタ名は同じでもいい。



最後に例題。
問題.コンストラクタについて正しい記述をすべてあげろ。
1.コンストラクタは最低一つは必ず定義しなければならない。
2.コンストラクタはオーバーロードして記述することができる。
3.コンストラクタはサブクラスからsuper()という記述で呼び出すが、
 super()はコンストラクタ定義の先頭に記述する必要がある。
4.デフォルトコンストラクタは、引数のないコンストラクタが
 定義されていないときに自動的に定義される。
5.コンストラクタはオーバーライドすることができる。
6.Abstractクラスにコンストラクタを定義することはできない。







答え.
1.×
2.○
3.○
4.×。コンストラクタが一つもないときにデフォルトコンストラクタが作られる。
5.×。
6.○.Abstractクラスでもコンストラクタを定義することができる。
スポンサーサイト
  1. 2005/04/17(日) 16:36:36|
  2. 資格:SJC-P|
  3. トラックバック:0|
  4. コメント:0
<<クラスの宣言 | ホーム | 福本ネタ>>

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

トラックバックURLはこちら
http://runark.blog6.fc2.com/tb.php/31-aec756e2

ルナーク

Category

Recent Comments

Recent Entries

Recent Trackbacks

Archives

Links

Search

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。