人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Javaのコンストラクタについて質問です。
親クラスAを作成し、子クラスBが親クラスAをextendsするように実装しました。親クラスAにはデフォルトコンストラクタを実装していません。
すると、「デフォルトコンストラクタを実装しろ」というようなエラーが出ました。

なぜ、デフォルトコンストラクタを実装する必要があるのでしょうか。また、デフォルトコンストラクタを使わせたくない場合にはどうすればよいのでしょうか。

●質問者: Gaasu
●カテゴリ:コンピュータ
✍キーワード:Java エラー クラス コンストラクタ デフォルト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 味わい
●50ポイント

コンストラクタを使わせないということは出来ません。

Javaはコンストラクタを使う思想で作られているから従う歯科ありません。


恐らくGaasuさんは、継承した子クラスに(デフォルトコンストラクタではない)引数ありの

コンストラクタを作ったのでしょう。

それをコンパイルすると、子クラス内で作ったコンストラクタ内でsuper();という1行が

勝手に追加されます。(もちろん明示的に書くこともできる)

super();が書かれないのは、例えばsuper(10);のように明示的にGaasuさんが書いている場合。

親がいないと子もいませんから、子クラスの中で親クラスを生成?することは必須なんです。


super();というのは親のデフォルトコンストラクタを呼び出しています。

Gaasuさんのソースの親クラスにはデフォルトコンストラクタがないんです。


なぜ内科。

引数ありのコンストラクタがあるのでしょう。


対処方法としては、親クラスにデフォルトコンストラクタを書けばいいです。

むしろデフォルトコンストラクタは必ず書く癖を付ければいいと思います。

だって書かなければいけないというJavaのルールですから。



ちなみに、

class Oya {}

class Ko extends Oya {}

これをコンパイルするとコンパイラが勝手にコンストラクタを書いたりするので、

class Oya { public Oya();}

class Ko extends Oya { public Ko(super());}

こんな感じになります。



コンパイラが勝手に作るコンストラクタとsuper();の1行を意識して考えて書いて下さい。

コンパイラは引数なし系しか書きませんからね。



ななブロ(ビジネス、コンピュータ):http://d.hatena.ne.jp/nanacy7741/

◎質問者からの返答

回答ありがとうございます。


2 ● yamayamada
●20ポイント

子クラスで親クラスの引数ありのコンストラクタを呼べばいいです。

◎質問者からの返答

回答ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ