我发现的答案之一是“如果属于两个不同类的两个方法/变量具有相同的名称,则多重继承会导致冲突”。但我认为在实现多个接口时也可能存在冲突。例如,考虑一个实现两个具有相同变量名的接口的类(变量可以在接口中定义,默认情况下它们是最终的)在其中声明
interface Ainterface {
public final static int i=10;
}
class InterfaceCheck implements Ainterface {
public static void main(String[] args) {
System.out.println(i);
}
}
以上代码完美无缺
interface Ainterface {
public final static int i=10;
}
interface Binterface {
public static final int i=20;
}
class InterfaceCheck implements Ainterface,Binterface {
public static void main(String[] args) {
System.out.println(i);
}
}
根据互联网上的消息来源“实施多个接口永远不会导致冲突” 但上面的代码会产生错误。所以这就是我所说的冲突。
答案 0 :(得分:6)
变量可以在界面中定义,默认情况下它们是最终的
*默认情况下,Java界面中的变量为 public , static 和 final 。这是因为接口并不是指示实现,而是指示行为。这意味着接口中的变量实际上是常量。
不继承静态变量。所以不存在冲突的可能性。
答案 1 :(得分:0)
它将从两个接口实现对象。因此,如果两个接口都具有相同的变量,那么它将作为单个变量实现。同样适用于方法。
答案 2 :(得分:0)
Interface1{
public static final int a= 10;
default void method1(){
// definition
}
void method2DeclaredOnly();
}
Interface2{
public static final int a = 20;
default void method3(){
// definition
}
void method2DeclaredOnly();
}
class MyClass implements Interface2, Interface1{
void method2DeclaredOnly(){
System.out.println(Interface1.a); // static members can be referred. directly. Classname.field
// defined here allowed.
}
但是,必须定义默认方法,如果有的话,你要实现两个接口,否则它会像前面提到的那样给出编译错误。现在这里棘手的部分是,使用常见的默认方法 1A中的超强>名为.abc();
interface IA{
default void abc(){
//..
}
}
interface IB{
default void abc(){
//..
}
}
class A implements IA, IB
{
public void abc(){
IA.super.abc(); //..
}
}