java不同包的同名类_java接口和抽象类的区别

java不同包的同名类_java接口和抽象类的区别一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的改实现方法属于哪个接口的呢?_java实现不同接口同名方法

java不同包的同名类_java接口和抽象类的区别"

存在这样一种情况,有一个类实现了两个接口,在这两个接口当中有相同的方法(同名同参),那么类中的该实现方法属于哪个接口的呢?

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注