Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的匿名内部类_Java - Fatal编程技术网

Java中的匿名内部类

Java中的匿名内部类,java,Java,在我的书里有一些难以理解的练习 创建一个具有非默认构造函数(带参数的构造函数)和无默认构造函数(无“无参数”构造函数)的类。创建第二个类,该类具有返回对第一个类的对象的引用的方法。通过创建从第一个类继承的匿名内部类来创建返回的对象 有人能提供源代码吗 编辑: 我不明白最终的源代码应该是什么样子。我带来了这个: class FirstClass { void FirstClass( String str ) { print( "NonDefaultConstruct

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

创建一个具有非默认构造函数(带参数的构造函数)和无默认构造函数(无“无参数”构造函数)的类。创建第二个类,该类具有返回对第一个类的对象的引用的方法。通过创建从第一个类继承的匿名内部类来创建返回的对象

有人能提供源代码吗

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

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

老实说,除非您不知道或不理解内部类的定义,否则这个练习相当简洁。您可以在此处找到匿名内部类的示例:

否则,此简明示例说明了问题:

/** 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;
              }
         };
    }
}

这其中的哪一步还不清楚?有一个词你不懂吗?我正在一本书中自学Java,所以你应该把答案贴在这里。我不明白最终的源代码应该是什么样子。我带来了这个:
class-FirstClass{void-FirstClass(String-str){print(“NonDefaultConstructorClass.constructor(\”“+str+“\”));}}}class-SecondClass{FirstClass方法(String-str){return new FirstClass(){print(“InnerAnonymousClass.constructor()”);};};}}}}}公共类任务{7{public static void main(String[]args){SecondClass scInstance=new SecondClass();FirstClass fcinstance=scInstance.method(“Ta”);}
dystroy的问题仍然是一个很好的问题。如果你理解它使用的所有术语,那么问题就相当简单了。问题的哪一部分对你来说是不可理解的?为了更清楚,请注意,从B返回的a的引用使用了非默认构造函数,并覆盖了a#getValue()返回两倍的内部值。例如,调用getReference().getValue()在本例中将返回10。根据赋值,我相信编辑是正确的,“没有默认构造函数(没有“无参数”构造函数)”,但这有
public A(){this.value=0;}
如果删除此项,看起来一切都能正常工作。这将正常工作,因为Java类加载器会自动将所有类成员初始化为默认值,但包含该声明是关于意图的明确声明。这也是为了在不解释隐式构造的情况下完成说明。:)