存在这样一种情况,有一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的该实现方法属于哪个接口的呢?
public interface InterfaceA {
void method(); void methodA(); }
讯享网
讯享网public interface InterfaceB {
void method(); void methodB(); }
public class Subject implements InterfaceA, InterfaceB {
@Override public void method() { } @Override public void methodB() { } @Override public void methodA() { } }
Subject类实现了InterfaceA和InterfaceB两个接口的方法,其中method是InterfaceA和InterfaceB共用的相同方法,那么Subject类中实现的该方法是属于哪个接口的呢?
答案是既是InterfaceA的也是InterfaceB的,什么意思?就是说此时的Subject类你既可以把它当做InterfaceA来使用其中的method方法,也可以把它当做InterfaceB来使用其中的method方法。
Java对于implements的要求是只要在接口中声明的方法,在实现类中必须要实现它,单看Subject 类,它里面具有method和methodA两个方法,因此它就是实现了InterfaceA接口所有方法的实现类,同时它里面具有method和methodB两个方法,因此它也是实现了InterfaceB接口所有方法的实现类。
因此,在使用Subject 类的时候,如果你认为它是InterfaceA,那它就是InterfaceA,如果你为它是InterfaceB,那它就是InterfaceB。
所以可以像下面这样去使用它,完全没有问题:
讯享网public class Main {
public static void main(String[] args) { //我现在认为它是一个InterfaceA实现类, 就把它当做一个InterfaceA接口来使用 InterfaceA interfaceA = new Subject(); interfaceA.method(); interfaceA.methodA(); test(interfaceA); //我现在认为它是一个InterfaceB实现类, 就把它当做一个InterfaceB接口来使用 InterfaceB interfaceB = new Subject(); interfaceB.method(); interfaceB.methodB(); //下面都是完全没问题的 Subject subject = new Subject(); subject.myMethod(); //当成InterfaceA用 interfaceA = subject; interfaceA.method(); interfaceA.methodA(); //当成InterfaceA用的过程中又可以当成InterfaceB用 interfaceB = subject; interfaceB.method(); interfaceB.methodB(); //当成InterfaceB用的过程中又可以再当成InterfaceA用 interfaceA = (InterfaceA) interfaceB; interfaceA.method(); interfaceA.methodA(); //...随便用... } private static void test(InterfaceA interfaceA){ //如果我知道InterfaceA的实现类同时也implements了InterfaceB // 那么我就可以把它当做InterfaceB的实现类来使用 InterfaceB interfaceB = (InterfaceB) interfaceA; interfaceB.method(); interfaceB.methodB(); } }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/41045.html