Java 多重继承,将调用哪个方法?
在这种情况下,调用哪个接口的方法Java 多重继承,将调用哪个方法?,java,Java,在这种情况下,调用哪个接口的方法 interface A{ public abstract void method(); } interface B{ public abstract void method(); } class C implements A,B{ public void method(){} public static void main(String args[]){ C ob=new C();
interface A{
public abstract void method();
}
interface B{
public abstract void method();
}
class C implements A,B{
public void method(){}
public static void main(String args[]){
C ob=new C();
ob.method();
System.out.println("");
}
}
将调用Cs方法
因为它是C的实例
注意:在本例中,接口至少没有实现。接口不提供实现。调用的方法将是在C中声明和实现的方法。实际上,它与接口包含方法定义无关,而事实是在运行时它将调用类C的方法declarationobj.method。当您在接口中定义方法时,您不提供方法体。您只定义了一个原型和一个所有实现者都必须遵循的契约。这允许编译器知道,如果一个对象实现了一个接口,那么它必须拥有这些方法。由于您没有在两个接口中创建方法体,因此在类C中只有一个方法 这对于Java1.8来说并不适用,在Java 1.8中,您可以在接口中提供方法的默认实现。现在,您可能有一个类似于您发布的示例的情况,其中您实现了两个具有冲突方法体的接口。我之所以说可以,是因为设计者预见到了这一点,如果不显式重写冲突的默认方法,这将是一个编译器错误 例如: 这是一个类型多重继承的示例,它指的是类C,用于A或B引用。这不是行为/方法的多重继承或状态的多重继承,Java中没有状态的多重继承 所以您需要为该方法提供显式实现,以实现联系人,记住接口是一个协定,并且您的类应该完全实现该协定,因为这里没有方法的继承 但是在Java8中,通过在接口中提供默认实现,可以对行为/方法进行多重继承,因此如果是这种情况,则需要在C类上提供显式实现,并且可以将调用委托给其中一种类型。例如:
public class Main {
public static interface A {
default public int get() {
return 0;
}
}
public static interface B {
default public int get() {
return 1;
}
}
public static class C implements A, B {
public int get() {
return B.super.get();
}
}
public static void main( String[] args ) throws Throwable {
System.out.println( new C().get() );
}
}
现在您可以理解为什么可以实现多个接口,但不能扩展多个类。这里不需要使用abstract关键字。默认情况下,接口方法是公共的,抽象的,由Contracts覆盖,但调用哪个接口的方法?这是什么意思?意味着该方法用于哪个接口的A或B?
public class Main {
public static interface A {
default public int get() {
return 0;
}
}
public static interface B {
default public int get() {
return 1;
}
}
public static class C implements A, B {
public int get() {
return B.super.get();
}
}
public static void main( String[] args ) throws Throwable {
System.out.println( new C().get() );
}
}
// delegate the call to A method implementation, Java 8
@Override
public void method() {
A.super.method()
}