3

外部クラスのメンバー関数の 1 つの内部のインスタンスを作成する内部クラス B があるとします。外部クラスのインスタンスを作成せずにそれを行う方法はありますか?

どうもありがとう。

class A {
    class B {

    }

    public void function() {
       // create an instance of B, normally have to create a 
       // instance of A to be bond to by b
       B b = new B();
    }
}
4

5 に答える 5

2

これを行う唯一の方法は、次のように宣言することB staticです。

class A {
    static class B {

これは、に関連付けられBた のインスタンスがなく、 の外部インスタンスが利用できないコンテキストでインスタンス化できることを意味します。A

つまり、現在のコードはそのままで問題なくコンパイルされます (function()は non-staticであるためA、このコンテキストで利用可能な のインスタンスがあります)。

于 2013-04-12T05:59:32.847 に答える
1

likeclass Bの外部から のオブジェクトを作成できますclass A

B b = 新しい A().新しい B();

しかし、ここでは外部クラスのインスタンスを作成してから、内部クラスのインスタンスを作成しています。外部クラスのインスタンスを作成せずに内部オブジェクトを作成することはできません。

しかし、あなたの内部クラスがそうであれば、それは可能ですstatic

class A {
    static class B {

    }
}
class C{
   public void test(){
       B b = new B();
   }
}
于 2013-04-12T06:02:58.880 に答える
0

外部クラスのメソッド内でネストされた/内部クラスにアクセスする場合、外部クラスのインスタンスを作成する必要はありません。

于 2013-04-12T06:01:13.840 に答える
0

ネストされたクラスが static でない場合、答えはNoです。なぜなら :

Inner class treated as instance member of outer class.

したがって、内部クラスのインスタンスを作成する唯一の方法は、最初に外部のインスタンスを作成することです。次に、内部クラスでインスタンスを作成することしかできません。次のように:

Inner inner = new Outer().new Inner(); 

ただし、外部クラスのオブジェクトを作成せずに内部クラスオブジェクトを作成する方法があります。そのため、内部クラスはstatic ネストされたクラスにする必要があります。次のように。

class Outer {
static class Inner {

次に、次のような内部クラスのオブジェクトを作成できます。

Inner inner = Outer.new Inner();

理由:

Static nested class always treated as static member of outer class.
于 2013-04-12T06:14:34.487 に答える
0

class Bの内部メンバー関数のインスタンスを直接作成できますclass A。実際class Bにはメンバー(Aの変数/関数)のようなものですClass A。他のメンバーと同様に直接アクセスできます。だから問題ない

 public void function() {
   // create an instance of B, normally have to create a 
   // instance of A to be bond to by b
   B b = new B();
 }

class Bのスコープ外で のインスタンスを作成したい場合、このように Bのインスタンスを作成するclass Aには のインスタンスだけが必要ですclass Aclass

A a = new A();
B b = a.new B();

のインスタンスなしclass Bで のスコープ外に のインスタンスを作成し、 static として宣言するとします。これは、 のスコープ内に制限されないことを意味します。class Aclass Aclass Bclass Bclass A

class A {
    static class B { 
    }

    public static void main(String[] args) {
        B b = new B();
    }
}
于 2013-04-12T06:06:37.050 に答える