想知道如何调用public m方法?
public class Test1 {
public static void main(String[] args) {
Test1 test = new Test1() {
public void m() {
System.out.println("m");
}
};
}
}
答案 0 :(得分:2)
我不相信你可以。您必须创建一个接口或子类。 (好吧,好吧,那可能不是真的。你可以用反射来做。)
,就像这样(建造后通过test.m()
称呼它):
public class Test1 {
public static void main(String[] args) {
SubTest1 test = new SubTest1() {
public void m() {
System.out.println("m");
}
};
test.m();
}
private static abstract class SubTest1 extends Test1 {
public abstract void m();
}
}
或者像这样,在施工过程中发生的地方:
public class Test1 {
public static void main(String[] args) {
SubTest1 test = new SubTest1() {
public void m() {
System.out.println("m");
}
};
}
private static abstract class SubTest1 extends Test1 {
public SubTest1() {
this.m();
}
public abstract void m();
}
}
你can't define an anonymous class constructor,以便最后使用SubTest1
类的构造函数和抽象方法。
答案 1 :(得分:1)
您无法直接调用m
,因为test
的类型为Test1
且不包含名为m
的方法,但您永远不会发现自己处于这种情况。匿名类的重点是改变基类功能的一些已经存在的方面,因此添加 new 方法毫无意义。请考虑重新考虑您的设计或使用命名类。
当然,如果您将来不关心test
,您可以这样做:
new Test1() {
public void m() {
System.out.println("m");
}
}.m();
虽然您很少想要这样做,但如果您使用Thread
或Runnable
并需要调用run
方法,则可能会有用。
答案 2 :(得分:0)
如果Test1有一个名为“m”的方法,你可以在实例化内部类之后调用test.m():
public class Test1 {
public static void main(String[] args) {
Test1 test = new Test1() {
public void m() {
System.out.println("New Behavior");
}
};
test.m();
}
public void m() {
System.out.println ("Default Behavior");
}
}
运行它会输出:
New Behavior