具有匿名类型构造函数的对象类

时间:2015-02-23 10:31:27

标签: java object anonymous anonymous-class anonymous-inner-class

我正在创建一个Object作为具有匿名类型的类变量。没有编译错误。我的问题是如何使用该课程?如何调用我定义的方法?它实际上在哪里使用?

public class MyClass {

    Object o = new Object(){
        public void myMethod(){
            System.out.println("In my method");
        }
    };

}

我无法调用对象的myMethod() o。怎么做,我们什么时候使用它?

4 个答案:

答案 0 :(得分:4)

调用不属于超类方法的匿名类的方法的唯一方法是立即调用它:

new Object(){
    public void myMethod(){
        System.out.println("In my method");
    }
}.myMethod();

如果您只是将匿名类存储在Object变量中,您将无法再调用其方法(正如您所知)。

然而,这种结构的用处似乎非常有限......

答案 1 :(得分:1)

要做这样的事情,你应该在Object类中有一个方法。简而言之,这意味着您需要覆盖Object类中定义的方法。

尝试类似:

Object o = new Object(){
    public boolean equals(Object object){
        System.out.println("In my method");
        return this == object;//just bad example.
    }
};
Object o2 = new Object();
System.out.println(o.equals(o2));will also print "In my method"

答案 2 :(得分:0)

您的变量类型为Object,因此编译器允许您调用的唯一方法是在Object中声明的方法。

改为声明一个非匿名类:

private static class MyObject {
    public void myMethod() {
        System.out.println("In my method");
    }
};

MyObject o = new MyObject();

答案 3 :(得分:0)

您可以使用界面:

public interface MyInterface {
    public void myMethod();
}

在你的MyClass中

public class MyClass {
    MyInterface o = new MyInterface() {
        @Override
        public void myMethod() {
            System.out.println("In my method");
        }
    };

    public void doSomething() {
        o.myMethod();
    }
}