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

Object class with anonymous type constructor

我正在创建一个对象作为具有匿名类型的 class 变量。没有编译错误。我的问题是如何使用class?如何调用我定义的方法?它实际用在什么地方?

public class MyClass {

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

}

我无法调用对象 o 的 myMethod()。如何做到这一点以及我们何时使用它?

要执行这样的操作,您应该在 Object class 中有一个方法。简而言之,这意味着您需要重写 Object class.

中定义的方法

试试这样的:

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"

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

改为声明非匿名 class:

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

MyObject o = new MyObject();

调用不属于超级 class 方法的匿名 class 方法的唯一方法是直接调用它:

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

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

然而,这种构造的用处似乎相当有限...

您可以使用接口:

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