2015-02-23 111 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(); 
    } 
}