美文网首页
Java实战开发篇-6 接口

Java实战开发篇-6 接口

作者: MRJMORIARTY | 来源:发表于2020-03-26 18:23 被阅读0次

    接口

    一、关键字和使用规则

    1.关键字:interface
    说明:接口类似于抽象类,有点像模板
    用处:减少代码量,且降低代码耦合度
    2.使用规则
    (1)接口不能被实例化,即不能创造对象,所以没有构造方法
    (2)接口中的变量只能是静态成员常量
    (3)接口的默认修饰符是static final,所以声明接口的时候不用再写修饰符
    (4)接口之间可以互相实现继承,并且接口可以多继承。这也是Java语言间接实现多继承的方法
    (5)接口中的方法一般为抽象方法,不能在接口中实现,只能在使用这个接口的类里面去实现(模板)
    (6)接口中的方法默认修饰符为public abstract

    二、接口使用方法:

    修饰符 class 类名 implements 接口名1,接口名2...

    //定义一个接口
    public interface Student{
      void observe();
    }
    public class Student implements Student{
      void observe(){
    System.out.println("姓名")
    }
    }
    

    当只需要使用到接口内的某一个方法时,可以使用内部接口
    通过修饰符 class 类名 implements 接口名1.内部接口1,接口名1.内部接口2,接口名2.内部接口1
    实现一接口对应一方法

    //定义一个接口内接口
    public interface Student {
        void observe();
        public interface write{
        void read();
        }
    }
    public class Student implements Student.write{
        void read(){
    System.out.println("姓名")
    }
    }
    

    三、接口最常用功能

    实现数据回调,通过下面找“中介租房子”例子来看使用接口的好处

    //新建一个类Person,这个Person的对象需要租房子
    class Person {
        public void needOneHouse(){
            //找一个中介,完成租房
            System.out.println("我想看下房子");
            Agent agent = new Agent();
            agent.setXM(this);
            agent.rentHouse();
        }
        public void callBackMSG(){
        }
        public void Thanks(){
            System.out.println("好的,谢谢");
        }
    }
    //如果Somebody也要租房子,看看在之后有多麻烦
    class Somebody{
        public void needOneHouse(){
            //找一个中介,完成租房
            System.out.println("我想看下房子");
            Agent agent = new Agent();
            agent.setSome(this);
            agent.rentHouse();
        }
        public void callBackQQ(){
            
        }
        public void Thanks(){
            System.out.println("好的,谢谢");
        }
    }
    //定义一个中介类,实现租房子的功能
    class Agent {
        private Person XM;
        private Somebody some;//每新增一个客户,都要创建一个对象
        public void rentHouse(){
            System.out.println("帮你找房子");
            if(XM!= null){
            XM.callBackMSG();
        }
        if(some!= null){
            some.callBackQQ();
        }//这里必须加判断语句,因为第一次是执行XM的方法,还没有创建好some对象,负责会报错
            System.out.println("我是中介,房子找到了");
        }
        public Person getXM() {
            return XM;
        }
        public void setXM(Person xM) {
            this.XM = xM;
        }
        public Somebody getSome() {
            return some;
        }
        public void setSome(Somebody some) {
            this.some = some;
        }
    }
    public class MyClass {
        public static void main(String[] args) {
            Agent a = new Agent();
            Person p = new Person();
            Somebody Some = new Somebody();
            p.needOneHouse();
            p.callBackMSG();
            p.Thanks();
            Some.needOneHouse();
            Some.callBackQQ();
            Some.Thanks();
        }
    }
    

    结果为
    我想看下房子
    帮你找房子
    好的,谢谢
    我想看下房子
    帮你找房子
    我是中介,房子找到了
    好的,谢谢

    从上面例子就可以看出,每增加一个对象,就需要写许多功能重复的代码,如果对象非常多,就很麻烦了
    这个时候就可以体现出接口的好处
    我们使用接口来改一下这个代码
    步骤
    1.定义一个接口,统一返回数据的方式
    2.定义一个变量接收谁来监听网络下载完毕的事件
    3.提供set方法保存当前监听者
    4.任务结束 回调数据
    5.必须实现接口内部的所有抽象方法
    6.必须传递当前对象给功能类
    7.调用功能类,完成功能

    public class Agent {
         private onAgentFinishListener listener;//用接口类型使用所有类型
         public void rentHouse(){
             if(listener!=null){
                 System.out.println("帮你找房子");
                 System.out.println("我是中介,房子找到了");
                 listener.OnFinish("四合院");
             }
         }
        
         public interface onAgentFinishListener{
             void OnFinish(String msg);//找到房子后,用来回复
         }
        public onAgentFinishListener getListener() {
            return listener;
        }
        public void setListener(onAgentFinishListener listener) {
            this.listener = listener;
        }
    }
    
    class Person implements Agent.onAgentFinishListener {
        public void needOneHouse(){
            //找一个中介,完成租房
            Agent xm = new Agent();
            xm.setListener(this);
            System.out.println("我想看下房子");
            xm.rentHouse();
        }
        public void Thanks(){
            System.out.println("好的,谢谢");
        }
        @Override
        public void OnFinish(String msg) {
        System.out.println("我是xm,喜欢你的房子");
        }
    }
    
    class Somebody implements Agent.onAgentFinishListener{
        public void needOneHouse(){
            //找一个中介,完成租房
            Agent some = new Agent();
            some.setListener(this);
            System.out.println("我想看下房子");
            some.rentHouse();
        }
        public void Thanks(){
            System.out.println("好的,谢谢");
        }
        @Override
        public void OnFinish(String msg) {
        System.out.println("我是some,喜欢你的房子");
        }
    }
    

    结果为
    我想看下房子
    帮你找房子
    我是中介,房子找到了
    我是xm,喜欢你的房子
    好的,谢谢
    我想看下房子
    帮你找房子
    我是中介,房子找到了
    我是some,喜欢你的房子
    好的,谢谢

    相关文章

      网友评论

          本文标题:Java实战开发篇-6 接口

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