我正在创建一个Object作为具有匿名类型的类变量。没有编译错误。我的问题是如何使用该课程?如何调用我定义的方法?它实际上在哪里使用?
public class MyClass {
Object o = new Object(){
public void myMethod(){
System.out.println("In my method");
}
};
}
我无法调用对象的myMethod()
o。怎么做,我们什么时候使用它?
答案 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();
}
}