Java-0009-interface接口

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接口的一种类型来传参

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,778评论 18 399
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 7,143评论 0 62
  • 1976年1月8日,掐指一算,我才10岁零2个月啊!四年级。那一年记忆深刻,三个爷爷去世了,戴白花,半夜值班保红旗...
    渭水兰曼阅读 195评论 0 0
  • XLua下载地址:https://github.com/Tencent/xLua 下载后接下来就是导入XLua到u...
    _凉笙阅读 7,769评论 0 5