0

私の本の中にいくつかの理解できない練習をしました。

「デフォルト以外のコンストラクター (引数を持つもの) とデフォルトのコンストラクター (「引数なし」コンストラクターなし) を持つクラスを作成します。最初のクラスのオブジェクトへの参照を返すメソッドを持つ 2 番目のクラスを作成します。最初のクラスから継承する匿名の内部クラスを作成することによって返すオブジェクト。」

誰でもソースコードを出すことができますか?

編集: 最終的なソース コードがどのように見えるべきかわかりません。そして、私はこれを持ってきました:

class FirstClass
{
    void FirstClass( String str )
    {
        print( "NonDefaultConstructorClass.constructor(\"" + str + "\")" );
    }
}

class SecondClass
{
    FirstClass method( String str )
    {
        return new FirstClass( )
        {
            {
                print( "InnerAnonymousClass.constructor();" );
            }
        };
    }
}

public class task_7
{
    public static void main( String[] args )
    {
        SecondClass scInstance = new SecondClass( );
        FirstClass fcinstance = scInstance.method( "Ta ta ta" );
    }
}
4

1 に答える 1

1

正直なところ、内部クラスの定義を知らないか理解していない限り、演習は非常に簡潔です。匿名の内部クラスの例は、次の場所にあります。

http://c2.com/cgi/wiki?AnonymousInnerClass

それ以外の場合、この簡潔な例は問題を示しています。

/** Class with a non-default constructor and no-default constructor. */
public class A {
    private int value;

    /** No-arg constructor */
    public A() { 
        this.value = 0;
    }

    /** Non-default constructor */
    public A(int value) { 
        this.value = value;
    }

    public int getValue() { 
        return this.value;
    }
}

/** Class that has a method that returns a reference to A using an anonymous inner class that inherits from A. */
public class B {
    public B() { ; }

    /** Returns reference of class A using anonymous inner class inheriting from A */
    public A getReference() {
         return new A(5) {
              public int getValue() {
                  return super.getValue() * 2;
              }
         };
    }
}
于 2012-08-25T16:35:35.490 に答える