想知道如何调用 public m 方法?
public class Test1 {
public static void main(String[] args) {
Test1 test = new Test1() {
public void m() {
System.out.println("m");
}
};
}
}
想知道如何调用 public m 方法?
public class Test1 {
public static void main(String[] args) {
Test1 test = new Test1() {
public void m() {
System.out.println("m");
}
};
}
}
我不相信你可以。您必须创建一个接口或子类。(嗯,好吧,这可能不是真的。你可以通过反思来做到这一点。)
例如,像这样(在构造后通过调用它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();
}
}
您不能定义匿名类构造函数,因此最后使用类的构造函数SubTest1
和抽象方法。
您不能直接调用m
,因为test
is 的类型Test1
不包含名为 的方法m
,但您永远不应该发现自己处于这种情况。匿名类的全部意义在于改变基类功能的一些已经存在的方面,因此添加新方法没有意义。考虑重新考虑您的设计或改用命名类。
当然,如果您将来不关心test
,您可以这样做:
new Test1() {
public void m() {
System.out.println("m");
}
}.m();
尽管您很少想做这样的事情,但如果您正在使用Thread
或Runnable
需要调用该run
方法,它可能会很有用。
如果 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