Java中的匿名内部类

时间:2012-08-25 16:25:49

标签: java

在我的书中有一些难以理解的练习。

“使用非默认构造函数创建一个类(一个带参数)并且没有默认构造函数(没有”no-arg“构造函数)。创建第二个类,该类具有返回对第一个对象的引用的方法class。通过创建一个继承自第一个类的匿名内部类来创建返回的对象。“

任何人都可以提供源代码吗?

编辑: 我不明白最终的源代码应该是什么样子。我带着这个来了:

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" );
    }
}

1 个答案:

答案 0 :(得分: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;
              }
         };
    }
}