【发布时间】:2017-05-17 12:34:28
【问题描述】:
我正在尝试了解如何克服 JAVA 中的“钻石问题” 假设我有这 3 个接口:
interface Alpha{
public default int methodA() {
int result=0;
System.out.println("Print from Alpha methodA");
return result+4;
}
}
//**********************************
interface Betta extends Alpha {
public default int methodA() {
int result=0;
System.out.println("Print from Betta methodA");
return result+8;
}
}
//*******************************
interface Gamma extends Alpha {
public default int methodA() {
int result=0;
System.out.println("Print from Gamma methodA");
return result+16;
}
}
还有那个班级:
public class Delta implements Betta,Gamma {
public static void main(String args[]) {
// TODO Auto-generated method stub
Delta cObj=new Delta();
cObj.methodA();
}
我怎样才能得到类 Delta 给我 Alpha 接口的输出? 除了改成“Delta implements Alpha”还有什么办法吗?
【问题讨论】:
-
您无法访问已被覆盖的方法。如果您需要访问它,您需要添加一个可以调用的方法,该方法可以对该方法进行分类,例如到 Betta 或 Gamma。
-
如果可以的话,你可以在Alpha接口中定义
static方法,并从Delta类中调用。 -
你试过编译这个吗?
-
谢谢 Peter Lawrey 我会试试的
-
SachinSarawgi 但如果我这样做了,Betta 和 Gamma 就没用了,对吗?
标签: java interface extends implements diamond-problem