2015-02-23 132 views
2

我使用匿名类型将对象创建为类变量。没有编译错误。我的问题是如何使用这个类?如何调用我定义的方法?它实际上在哪里使用?使用匿名类型构造函数的对象类

public class MyClass { 

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

} 

我不能调用对象o的myMethod()。如何做到这一点,我们什么时候使用这个?

回答

4

只有这样,才能称之为一个匿名类是不是父类方法的一部分的方法是调用它立刻:

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

如果您只是将匿名类存储在Object变量中,那么您将无法再调用其方法(正如您已经想到的那样)。

然而,这种结构的实用性似乎相当有限...

+0

谢谢。有想法。但仍然在想这个的用处。如果我不得不直接调用它,那么使用“Object”类有什么意义?相反,我们可以将它命名为一个新的类MyClass,并稍后使用它来调用myMethod(),类似于使用接口指出的antonio – 2015-02-23 10:48:44

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" 
0

你的变量类型为Object,这样编译器将让你调用的唯一方法是在Object宣布的。

声明,而不是一个非匿名类:

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

MyObject o = new MyObject(); 
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(); 
    } 
}