【发布时间】:2012-07-03 01:07:29
【问题描述】:
我很困惑为什么不允许以下内容:
public interface MyInterface {
MyInterface getInstance(String name);
}
public class MyImplementation implements MyInterface {
public MyImplementation(String name) {
}
@Override
public static MyInterface getInstance(String name) { // static is not allowed here
return new MyImplementation(name)
}
}
我明白为什么接口中的方法不能是静态的,但为什么覆盖方法不能是?
我希望所有类都实现getInstance(String name) 方法,但我目前仅限于在对象已经被实例化的情况下才能调用该方法,哪种方式违背了目的......
*update:* 感谢您的回答,我现在明白了。基本上我不应该试图让一个实用程序类(或工厂类)实现一个接口(或者至少不是以这种方式)......
【问题讨论】:
-
想一想,如何调用被覆盖的静态方法?
-
@TedHopp 从技术上讲,这与那个问题完全相反。
-
这不是关于 interface 方法是静态的,而是允许我将 implementing 方法设为静态。所以我可以打电话给
MyImplementation.getInstance("foo");而不是new MyInterface("foo").getInstance("foo"); -
请注意,在您的示例中,静态覆盖的签名与接口方法的签名不匹配。这甚至不是一个有效的覆盖。
标签: java inheritance interface static static-methods