1

想知道如何调用 public m 方法?

public class Test1 {

    public static void main(String[] args) {
        Test1 test = new Test1() {
            public void m() {
                System.out.println("m");
            }
        };
    }
}
4

3 回答 3

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();
    }
}

不能定义匿名类构造函数,因此最后使用类的构造函数SubTest1和抽象方法。

于 2013-06-10T20:59:02.700 回答
1

您不能直接调用m,因为testis 的类型Test1不包含名为 的方法m,但您永远不应该发现自己处于这种情况。匿名类的全部意义在于改变基类功能的一些已经存在的方面,因此添加方法没有意义。考虑重新考虑您的设计或改用命名类。

当然,如果您将来不关心test,您可以这样做:

new Test1() {
    public void m() {
        System.out.println("m");
    }
}.m();

尽管您很少想做这样的事情,但如果您正在使用ThreadRunnable需要调用该run方法,它可能会很有用。

于 2013-06-10T21:07:49.660 回答
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
于 2013-06-10T21:11:51.417 回答