美文网首页
Java-0009-interface接口

Java-0009-interface接口

作者: 云转水流 | 来源:发表于2016-07-19 01:16 被阅读15次

    2016.7.18

    interface接口

    接口是一种引用类型,接口里是若干属性和方法。

    接口中的成员变量具有公共性(public)、静态性(static)和最终性(final),所以只能是常量。

    接口中的实例方法则是只声明不实现,方法的实现要在需要实现接口的类里。
    接口中的静态方法必须实现。

    *注:但在Java8里可以把实例方法声明成default,可以在接口中实现方法。
    接口可以多继承,即接口可以有多个父接口

    ****当接口作为参数类型时,没有语法可以合并表示实现了多个接口****

    例如:
    有两个接口

        public interface Standard1 {
            void first();
        }
    
        public interface Standard2 {
            void second();
        }
    

    有一个类实现了Standard1接口和Standard2接口

        public class Collage implements Standard1,Standard2{
            public void first() {
                System.out.println("first standard");
            }
            public void second() {
                System.out.println("second standard");
            }
        }
    

    有一个方法isConformed,这个方法有一个参数
    当isConformed的参数类型为Standard1时,表示实现了Standard1接口的类的实例对象可以传入

        public static void isConformed(Standard1 standard){
            standard.first();
        }
    

    当isConformed的参数类型为Standard2时,表示实现了Standard2接口的类的实例对象可以传入

        public static void isConformed(Standard2 standard){
            standard.second();
        }
    

    这就是面向接口编程,具有极大的灵活性,最重要的Java设计原则之一。

    但没法用任何语法将Standard1和Standard2合并表示为一个类型,作为isConformed方法的一个参数类型

    解决方法:
    新建一个Standard12接口继承Standard1和Standard1

        public interface Standard12 extends Standard1, Standard2 {
    
        }
    

    然后将Standard12作为参数类型,这样就可以传入实现了Standard12的类的实例对象,即可以传入实现了Standard1接口和Standard2接口里的方法的类的实例对象

        public static void isConformed(Standard12 standard){
            standard.first();
            standard.second();
        }
    

    但这个类不能implements Standard1接口和Standard2接口,必须implements Standard12接口。

        public class Collage implements Standard12{
            public void first() {
                System.out.println("first standard");
            }
            public void second() {
                System.out.println("second standard");
            }
        }
    

    另外,也可以写一个abstract类实现Standard1接口和Standard2接口

        public abstract class AbstractStandard12 implements Standard1,Standard2{
    
        }
    

    然后继承这个abstract类,这样这个abstract类就可以作为参数类型传参

        public class Collage extends AbstractStandard12{
            public void first() {
                System.out.println("first standard");
            }
            public void second() {
                System.out.println("second standard");
            }
        }
    

    间接实现了用满足同时实现Standard1接口和Standard2接口的一种类型来传参

    相关文章

      网友评论

          本文标题:Java-0009-interface接口

          本文链接:https://www.haomeiwen.com/subject/qkkpjttx.html