プロが教える店舗&オフィスのセキュリティ対策術

入門的に、インスタンスの作り方は、
AAA abc =new AAA();
なのですが、
VVV qqq = new ○○.xxx();
とこのような手法を用いた、方法があるようなのですが、意味がよくわかりませんので、サンプル、または、参考サイトを教えてください。

A 回答 (5件)

こんな感じになってると思われます。



class ○○ {
 public VVV xxx() {
  return( new VVV() )
 }
}

このような手法はいろんなパターンがありえると思うのですが以前私が経験したパターンの場合、以下のような感じでした。

ようはクラスZZZのインスタンスをシステムで一つしか持たせたくない場合です。
※しばらく離れていたので文法に多少間違いがあるかもしれません。ご容赦ください。

class ZZZ {
 static private ZZZ m_zzz = null;
 private ZZZ() {
  //コンストラクタは外部からアクセス不可
 }
 static public ZZZ xxx() {
  if( m_zzz == null ) {
   m_zzz = new ZZZ();
  }
  return( m_zzz );
 }
}
    • good
    • 0

「new ○○」とした時点ですでにインスタンスが生成されます。

生成したインスタンスを、変数に格納するかどうかは自由です。

で、変数に格納せずともインスタンスは使用できます。ですので、インスタンスのメソッドにアクセスしているだけです。

VVV qqq = new ○○.xxx();
は、

○○ oo =new new ○○();
VVV qqq = oo.xxx();

という記述と等価で、ooというインスタンスをそれ以降使用しないために、変数への格納を省略した形といえます。


ちなみにNo1さんの内容は、デザインパターンにおけるシングルトンの説明であり、上記の話とは関係ないと思っていいです。少し勘違いをされただけだと思います。
    • good
    • 0

ちょっと間違えました。


わかると思いますけど、newが2個重なっています。
以下が正しいです。

○○ oo = new ○○();
VVV qqq = oo.xxx();
    • good
    • 0

1.


VVV v = new AAA().xxx();
これは AAA クラスのインスタンスを生成した後そのまま xxx というメソッドを呼んでいます。
AAA a = new AAA();
VVV v = a.xxx();
とおなじです。

2.
AAA.BBB v = new AAA.BBB();
こちらは入れ子クラスのインスタンス生成です。
AAA クラスの中にある BBB クラスのインスタンスを生成します。

本題ではありませんが、「手法」と「文法」はきっちり区別された方がよいかと思います。今回の質問は手法ではなく文法に関する質問ですね。
    • good
    • 0

これだけだと、○○に()がついていないので、○○は単なるパッケージ名でxxxがクラス名という可能性があると思いますが。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!