-4 java
这与此处提出的问题几乎相同.
但我的问题扩展了这一点.
我可以将它更改为"A extends B"但是我必须使我的方法非静态并且只是将我的整个系统拧紧.
有什么办法可以解决这个问题吗?
好吧,假设我有一个方法AA和方法BB的A级
public class A {
public static final BB (){
}
public static final AA (){
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我已经设置了另一个实现它的类,但它也拥有自己的方法AA和BB版本.
public class AImpl implements A {
public BB (){
}
public AA (){
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试扩展类,我将得到错误"实例方法不能覆盖来自A的静态方法".
所以它说我可以通过删除A类中的静态来解决这个问题.
我这样做然后它告诉我几乎所有其他可能50个类都不能从类A的方法BB中引用非静态方法.
interfaces不能有static方法.它们可以有static final常量而不是方法.
如果你想拥有static需要使用的方法abstract class
interface Iface {
void doStuff();
}
abstract class Base implements Iface {
static void doStaticStuff() {
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
你不能覆盖static方法.你也不能implement其他课程.
你extend其他的课程.
除非您将一个类中的方法设为非,static或者将方法设置为另一个类,否则无法解决您的问题static
static class A {
static void a(){}
}
static class B extends A {
static void a(){}
}
Run Code Online (Sandbox Code Playgroud)
你想做什么没有任何意义.实例方法如何覆盖static方法?
请注意,这并不能覆盖a()方法A仅仅是建立了另一种a()在方法B.呼叫A.a()会调用该方法a()在A和班B.a()会调用该方法a()中B.
让static方法在两个不同的类中调用相同的东西并没有多大意义,因为它会导致静态导入问题,并且给人的印象是一个类中的方法会覆盖另一个类.它没有.
在任何情况下,即使如果你能覆盖static的方法; 你的也是final不可能的.即使你删除了static你也无法覆盖方法,直到你删除final.
| 归档时间: |
|
| 查看次数: |
6554 次 |
| 最近记录: |