假设我有一个名为Interface的接口,以及一个名为Base的具体类,为了使事情更复杂,有一个需要一些参数的ctor。
我想创建一个扩展Base并实现Interface的匿名类。
像
这样的东西 Interface get()
{
return new Base (1, "one") implements Interace() {};
}
这对我来说看起来很合理,但它不起作用!
(P.S:实际上,接口和基础也是通用类:D。但我暂时忽略它)
答案 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 {
}
这意味着MyClass
从bar
继承(或可能覆盖)方法Base
,并且必须从foo
实施方法Interface
。到目前为止,你的班级有这两种方法。
现在,想一想当您从方法返回Interface
类型的对象时会发生什么:您只获得Interface
提供的功能,即方法foo
。 bar
丢失(无法访问)。这将我们归结为两种情况:
Base
是没用的,因为您无法使用其方法,因为新对象被视为Interface
。Interface
也有方法foo
,但这意味着Base
本身应该实现Interface
,因此您可以直接扩展Base
:< / LI>
醇>
class Base implements Interface { public void foo(); public void bar(); } class MyClass extends Base { }