質問: 10; // コメント2 } } class bbb{ int i; } **************************** お粗末なサンプルで申し訳ありません。 私の認識では、クラスaaaのfuncメソッドでコメント1の行の処理は 必須と思っていますが正しいでしょうか? それともコメント1の行はなくても、コメント2の行の処理は実行 できるのでしょうか? この「new」の必要性と理由が分からずにパニックになってます。 どなたかよろしくお願い致します。
回答: > コメント1の行の処理は必須と思っていますが正しいでしょうか? 正しいです。 > コメント1の行はなくても、コメント2の行の処理は実行できるのでしょうか? できません。 > 「new」の必要性と理由 理由1: コンストラクタが複数存在する場合、 どのコンストラクタを使用すればよいのか システムが分からないからです。 クラスbbbを次のように書き換えて見ます。 class bbb { int i; public bbb() { } public bbb(int j){ i = j; } } この場合、どちらでbbbのインスタンスを生成したいのか システムには分かりません。 予め決めた方で自動作成するようにしておけば 良いような気もするかもしれませんが そうすると、自動作成したインスタンスが使われなかった場合に メモリを余計に消費することになってしまいます。 理由2: 「変数bbb」が参照するインスタンスは 必ずしも「クラスbbb」のインスタンスとは限らないからです。 例えば bbb = new object(); としても問題はありません。 ※もちろん今回の場合は次の行(bbb.i = 10;)でエラーになりますが..。 番外: 上記で示したような理由が聞きたいわけではなくて 「なぜnewキーワードが必要なのか?(newなんて無くてもいいのでは?)」 という問いかけならば理由は簡単で プライベートメソッドと同名のクラスが存在する場合に困るからです。