2011-08-01 8 views
4

finalというキーワードを使用しないとどうすればいいですか?コンストラクタに何を変更する必要がありますか?最後のキーワードを使用せずにクラスを拡張できないようにするにはどうすればよいですか?

public final class testName { 
    testName() { 
     //do something 
    } 
} 
+0

なぜファイナルを使用しないのですか? – fvu

+4

あなたの動機は何ですか?最終的なキーワードは上記の要件を満たすはずです。あなたはjavaの構文エキスパートになりたいですか? – blowyourheart

+0

はいそれは私が解決しなければならないテストです。 – MoglisSs

答えて

12

すべてのあなたのコンストラクタprivateを行った場合、そのクラスにも、もはや拡張できなくなります。

理由を確認するには、セクション3.4.4.1、'The default constructor'を確認してください。

このような[プライベート]コンストラクタは、クラスの外部から呼び出されることはありませんが、それはデフォルトコンストラクタの自動挿入を防止:あなたのプライベート既定のコンストラクタを宣言することで、段落の最後の文を保持します。

だから、効果的にアクセスすることはできませんスーパークラスでコンストラクタを宣言することによって、あなたのサブクラスが呼び出すことができますので、Javaはコンパイルを防ぐなし(他の)コンストラクタがありません。

+0

publicコンストラクタの代わりにまだプライベートコンストラクタを使用して新しいオブジェクトを返す静的メソッドを追加することができます: – pvoosten

+0

@embossなぜコンストラクタをprivateにすると拡張できないのか説明できます – RMT

+2

サブクラスの各コンストラクタはスーパーコンストラクタを呼び出します。そうでない場合は、暗黙のコンストラクタが使用されます。すべてのスーパーコンストラクタを非公開にする(暗黙のものを含む)と、コンパイルエラーが発生します。 – Vlad

3

「//何か」のコメントに挿入されたコードによってコンストラクタが失敗する場合は、例外をスローします。

その他のオプション - 最終クラスまたは専用コンストラクタ - は一般的に、実行時ではなくコンパイル時にエラーを報告するため、より良い選択肢です。しかし、障害が条件付きであるべき場合、または誰かがあなたの知識をテストしている場合は、例外を投げるのが通常の方法です。

[専門家の質問:コンストラクタが例外をスローすると、新しく作成されたインスタンスへの参照でプログラムが終了する可能性がありますか? (ヒント:はい)]

+1

できれば私は素晴らしい専門家の質問に対して+10を与えるだろう。ありがとう、ジェフ。 – Raku

0

このクラスの専用コンストラクタを作成できます。

関連する問題