存在这样一种情况,有一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的该实现方法属于哪个接口的呢?
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();
}
}
今天的文章java不同包的同名类_java接口和抽象类的区别分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86684.html