当前位置:  开发笔记 > 编程语言 > 正文

JAVA,无法绕过更具体的直接超级类型

如何解决《JAVA,无法绕过更具体的直接超级类型》经验,为你挑选了1个好方法。

我正在学习接口。这里会发生什么?以及为什么我收到一条消息:

“对超级类型SomeInterface2的非法引用,不能绕过更具体的直接超级类型interfejsy.SomeInterface3”

public interface SomeInterface1 {       
    public default void action(){
        System.out.println("default interface1 method");
    };

}

public interface SomeInterface2 {
    public default void action(){
        System.out.println("default interface2 method");
    };
}

public interface SomeInterface3 extends SomeInterface2{

    public default void action(){
        System.out.println("default interface3 method");
    }
}

...

public class ClassImplementingInterface implements SomeInterface1, SomeInterface2, SomeInterface3{

    //Every interface has action() method so we have to override it
    @Override
    public void action() {
        SomeInterface1.super.action();
        SomeInterface2.super.action(); //---- compiler error
        SomeInterface3.super.action();
    }
}

chen boon.. 5

您不能访问SomeInterface2的默认方法,因为它是SomeInterface3的超级接口。作为实现类,ClassImplementingInterface只能访问其直接超级接口的默认方法。从逻辑的角度来看,ClassImplementingInterface既实现了SomeInterface2又实现了SomeInterface3,但是SomeInterface2是超级接口,似乎不合理,如果必须这样做,请尝试以下程序。

public interface SomeInterface1 {       
    public default void action(){
        System.out.println("default interface1 method");
    };
}

public interface SomeInterface2 {
    public default void action(){
        System.out.println("default interface2 method");
    };
}

public interface SomeInterface3 extends SomeInterface2{
     public default void action(){
         System.out.println("default interface3 method");
     }
     public default void action2(){
         SomeInterface2.super.action();
     }
  }

public class ClassImplementingInterface implements SomeInterface1,SomeInterface2,SomeInterface3{
    public void action() {
        SomeInterface1.super.action();
        SomeInterface3.super.action2();
        SomeInterface3.super.action();
    }

}



1> chen boon..:

您不能访问SomeInterface2的默认方法,因为它是SomeInterface3的超级接口。作为实现类,ClassImplementingInterface只能访问其直接超级接口的默认方法。从逻辑的角度来看,ClassImplementingInterface既实现了SomeInterface2又实现了SomeInterface3,但是SomeInterface2是超级接口,似乎不合理,如果必须这样做,请尝试以下程序。

public interface SomeInterface1 {       
    public default void action(){
        System.out.println("default interface1 method");
    };
}

public interface SomeInterface2 {
    public default void action(){
        System.out.println("default interface2 method");
    };
}

public interface SomeInterface3 extends SomeInterface2{
     public default void action(){
         System.out.println("default interface3 method");
     }
     public default void action2(){
         SomeInterface2.super.action();
     }
  }

public class ClassImplementingInterface implements SomeInterface1,SomeInterface2,SomeInterface3{
    public void action() {
        SomeInterface1.super.action();
        SomeInterface3.super.action2();
        SomeInterface3.super.action();
    }

}

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有