匿名扩展类并同时实现接口?

时间:2012-03-01 10:17:14

标签: java anonymous-class

假设我有一个名为Interface的接口,以及一个名为Base的具体类,为了使事情更复杂,有一个需要一些参数的ctor。

我想创建一个扩展Base并实现Interface的匿名类。

这样的东西
 Interface get()
 {
     return new Base (1, "one") implements Interace() {};
 }

这对我来说看起来很合理,但它不起作用!

(P.S:实际上,接口和基础也是通用类:D。但我暂时忽略它)

2 个答案:

答案 0 :(得分:13)

不,你不能用匿名类做到这一点。如果你真的想要,你可以在方法中创建一个命名类:

class Base {
}

interface Interface {
}

public class Test {
    public static void main(String[] args) {
        class Foo extends Base implements Interface {
        };

        Foo x = new Foo();
    }
}

就我个人而言,我通常会将其自行引入静态嵌套类,但这是您的选择......

答案 1 :(得分:0)

这种情况对我来说没什么意义。原因如下:假设类Base是这样的:

class Base {
    public void foo();
}

Interface就是这样:

interface Interface {
    public void bar();
}

现在你要创建一个像这样的匿名类:

class MyClass extends Base implements Interface {
}

这意味着MyClassbar继承(或可能覆盖)方法Base,并且必须从foo实施方法Interface。到目前为止,你的班级有这两种方法。

现在,想一想当您从方法返回Interface类型的对象时会发生什么:您只获得Interface提供的功能,即方法foobar丢失(无法访问)。这将我们归结为两种情况:

  1. 扩展Base是没用的,因为您无法使用其方法,因为新对象被视为Interface
  2. Interface也有方法foo,但这意味着Base本身应该实现Interface,因此您可以直接扩展Base:< / LI>
    class Base implements Interface {
        public void foo();
        public void bar();
    }
    
    class MyClass extends Base {
    }