3 回答
TA贡献1921条经验 获得超9个赞
这里有一些问题。第一个问题是声明静态方法而不定义它的问题。这是之间的区别
public interface Foo {
public static int bar();
}
和
public interface Foo {
public static int bar() {
...
}
}
出于Espo提到的原因,第一个是不可能的:您不知道哪个实现类是正确的定义。
Java 可以允许后者。实际上,从Java 8开始,它确实做到了!
TA贡献1820条经验 获得超9个赞
接口中不能使用静态方法的原因在于Java解析静态引用的方式。尝试执行静态方法时,Java不会费心寻找类的实例。这是因为静态方法不依赖于实例,因此可以直接从类文件中执行。假设接口中的所有方法都是抽象的,则VM必须寻找该接口的特定实现,以便找到静态方法后面的代码,以便可以执行它。然后,这与静态方法解析的工作方式矛盾,并会在语言中引入不一致之处。
TA贡献1841条经验 获得超3个赞
谎言在设计原理的原因,那Java不允许多重继承。下例可以说明多重继承的问题:
public class A {
public method x() {...}
}
public class B {
public method x() {...}
}
public class C extends A, B { ... }
现在,如果您调用Cx()会发生什么?将执行Ax()还是Bx()?具有多重继承的每种语言都必须解决此问题。
接口在Java中允许某种受限的多重继承。为避免上述问题,不允许他们使用方法。如果我们在接口和静态方法上看同样的问题:
public interface A {
public static method x() {...}
}
public interface B {
public static method x() {...}
}
public class C implements A, B { ... }
同样的问题在这里,如果调用Cx()会发生什么?
添加回答
举报