use*_*454 7 java anonymous-class
假设我有一个名为Interface的接口,以及一个名为Base的具体类,为了使事情变得更复杂,有一个需要一些参数的ctor.
我想创建一个扩展Base并实现Interface的匿名类.
就像是
Interface get()
{
return new Base (1, "one") implements Interace() {};
}
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来很合理,但它不起作用!
(PS:实际上,接口和基础也是通用类:D.但我现在会忽略它)
Jon*_*eet 13
不,你不能用匿名类做到这一点.如果你真的想要,你可以在方法中创建一个命名类:
class Base {
}
interface Interface {
}
public class Test {
public static void main(String[] args) {
class Foo extends Base implements Interface {
};
Foo x = new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
就我个人而言,我通常会自己将其拉入静态嵌套类中,但这是您的选择......
这种情况对我来说毫无意义。原因如下:假设类Base是这样的:
class Base {
public void foo();
}
Run Code Online (Sandbox Code Playgroud)
这是Interface:
interface Interface {
public void bar();
}
Run Code Online (Sandbox Code Playgroud)
现在您想要创建一个匿名类,如下所示:
class MyClass extends Base implements Interface {
}
Run Code Online (Sandbox Code Playgroud)
这意味着MyClass继承(或可能覆盖)bar来自 的方法Base并且必须实现foo来自 的方法Interface。到目前为止一切都很好,你的类有这两种方法。
现在,想想当您从方法返回类型的对象时会发生什么Interface:您只能获得提供的功能Interface,即 method foo。bar丢失(无法访问)。这使我们分为两种情况:
Base是没有用的,因为您无法使用它的方法,因为新对象被视为Interface.Interface还有一个方法foo,但这意味着它Base本身应该实现Interface,所以你可以Base直接扩展:Run Code Online (Sandbox Code Playgroud)class Base implements Interface { public void foo(); public void bar(); } class MyClass extends Base { }
| 归档时间: |
|
| 查看次数: |
7389 次 |
| 最近记录: |