匿名内课

时间:2011-03-01 10:27:19

标签: java inner-classes anonymous-class

class One {
Two two() {
    return new Two() {
        Two(){}
        Two(String s) {
            System.out.println("s= "+s);
        }
    };
    }
}

class Ajay {
    public static void main(String ...strings ){
        One one=new One();
        System.out.println(one.two());
    }
}

上面的示例代码无法编译。它说“两个无法解决”。 这段代码有什么问题?

3 个答案:

答案 0 :(得分:1)

你正在创造

new Two()所以classpath中必须有一个有效的类。

制作

class Two{

}

class One {
Two two() {
    return new Two() {
//        Two(){}
//        Two(String s) {
//            System.out.println("s= "+s);
//        }//you can't override constuctors
    };
    }
}

或在新的左侧必须有超类或界面才能使其正常工作

答案 1 :(得分:0)

您没有声明Two课程。您声明了类One和私有成员two,其中two是您尝试通过匿名构造初始化的Two类的对象。

答案 2 :(得分:0)

new Two() {
    Two(){}
    Two(String s) {
        System.out.println("s= "+s);
    }
};

匿名内部类称为匿名,因为它没有自己的名称,必须通过它扩展/实现的基类或接口的名称来引用。

在您的示例中,您创建了一个Two的匿名子类,因此必须将Two声明为某个类或接口。如果已经声明了第二类,则要么在类路径中没有它,要么忘记导入它。