美文网首页
Java基础(4)——接口interface

Java基础(4)——接口interface

作者: 让时间走12138 | 来源:发表于2020-03-28 16:30 被阅读0次

    本节内容

    1.接口的理解和定义

    2.接口实现数据回调

    3.接口实现回调(中介租房)

    一、接口的理解和定义

    1.接口:一套协议,一套行为规范,是纯抽象类,所有成员函数都是抽象函数,所有成员变量都是public static final。设计程序时先定义接口,再实现类。任何需要在函数间传入传出的一定是接口而不是具体的类
    2.使用interface表示定义一个接口,接口也可以继承多个接口(多个接口之间用逗号隔开),但不能继承类。interface是一种特殊的class。类可以实现很多接口,接口不能实现接口。
    interface t1{
    }
    interface t2{
    }
    public interface DataIteration extends t1,t2{
        
    }
    
    3.接口内部元素:①接口不能被实例化(没有构造方法) ②接口里面可以定义变量,但只能是静态成员变量(默认修饰符 public static final),用这种方式替代枚举
    4.方法:抽象方法(不需要自己实现,谁用谁就实现),默认修饰符(public abstract),使用implements实现接口,必须实现接口里面定义的方法,接口里面的方法都是抽象方法
    public class MacBook implements DataIteration{
    
        @Override
        public void input() {
            System.out.println("苹果电脑安全输入");
        }
    
        @Override
        public void output() {
          System.out.println("苹果电脑流畅输出");
        }
    }
    
    5.内部接口:如果不想实现接口里的所有定义的方法,可以在接口里面定义一个内部接口,那么在子类调用接口时可以有选择的继承哪一个接口,以下为定义内部接口
    public interface DataIteration {
    
       interface Output{
           void output();
       }
        interface Input{
            void input();
        }
    }
    
    以下为继承内部接口的方法
    public class Mouse implements DataIteration.Output{
    
        @Override
        public void output() {
            System.out.println("鼠标输入坐标位置:东经38°,北纬55°");
        }
    }
    
    注:只继承了一个内部接口

    二、接口实现数据回调

    1.定义一个接口,统一返回数据的方式
    public interface OnHttpfinishedlistener{
            void onSuccess(String img);
            void onFailure(String err);
        }
    
    2.定义一个变量接收谁来监听网络下载完毕的事件
     private OnHttpfinishedlistener Listener;
    
    3.设置提供set方法,保持当前的监听者
    public void SetListener(OnHttpfinishedlistener Listener){
            this.Listener=Listener;
        }
    
    4.任务结束,回调数据
     public void GetData(String uri){
          System.out.println("开始下载。。。");
          System.out.println("图片下载完毕。。。");
    
          //任务结束,回调数据
            Listener.onSuccess("你的图片下载成功");
    
        }
    
    5.必须实现接口内部所有的抽象方法
     @Override
        public void onSuccess(String img) {
        System.out.println("展示图片:"+img);
        }
    
        @Override
        public void onFailure(String err) {
        System.out.println("下载失败"+err);
        }
    
    6.定义一个Http类,传递当前对象给功能类,再调用功能类完成功能
     public SplashView(){
           //开始下载数据
    
           Http http=new Http();
           //6.必须传递当前对象给功能类
           http.SetListener(this);
           //7.调用功能类完成功能
           http.GetData("www.baidu.com");
        }
    
    7.在主类里面创建一个新的类,它会自动调用默认构造方法,完成以上的一系列操作
    public class MyClass {
        public static void main(String[] args) {
            SplashView sv=new SplashView();
        }
    }
    

    三、接口实现回调(中介租房)

    1.创建一个中介类,在里面写一个租房方法,然后定义要租房的对象,因为用private修饰,所以使用set方法间接访问该成员变量。用接口实现代理设计模式
    public class Agent {
        private Person FuPo;
        private Dog KeJi;
    
        public void RantHouse() {
            System.out.println("我是中介,开始找房源");
            System.out.println("找到房子了");
            if (FuPo != null) {
                FuPo.CallbackUseQQ("你好");
            }
            if (KeJi != null) {
                KeJi.CallbackUsePhone();
            }
        }
            public void setFuPo (Person FuPo){
                this.FuPo = FuPo;
            }
            public void setKeJi (Dog KeJi){
                this.KeJi = KeJi;
            }
        }
    
    2.定义一个Person类,说明要租房的是人,在这里面先写一个方法来找房子,再自己定义一个接收方法
    public class Person {
        public void NeedOneHouse(){
           //找一个中介完成租房功能
            Agent agent =new Agent();
            //告诉他有结果了返回给谁
            agent.setFuPo(this);
            //开始找房
            agent.RantHouse();
        }
    
        //自己定义一个接收的方法
        public void CallbackUseQQ(String msn){
            System.out.println("辛苦了");
        }
    }
    
    3.定义一个Dog类,原理类似Person类
    public class Dog {
        public void wangwang(){
            //找中介
            Agent zs =new Agent();
            //告诉它返回给谁
            zs.setKeJi(this);
            //开始找房
            zs.RantHouse();
        }
    
        public void CallbackUsePhone(){
            System.out.println("wangwang");
        }
    }
    
    4.最后在主函数里面分别定义一个Person 和Dog对象,再分别调用里面的找房方法实现找房功能
    public class MyClass {
        public static void main(String[] args) {
            Person jia=new Person();
            jia.NeedOneHouse();
            Dog dahuang=new Dog();
            dahuang.wangwang();
        }
    }
    
    5.对于功能类(此处指Agent类)来说:①每增加一个使用者就需要添加一个成员变量保存(此处指Person成员FuPo和Dog成员KeJi)解决方法:使用多态,用接口类型的变量 接收所有子类类型
    public class Agent {
        private OnAgentFinishListener Listener;
        public interface OnAgentFinishListener{
            void UnFinish(String des);//抽象方法定义
        }
        public void RentHouse(){
            System.out.println("我是中介,开始找房源");
            System.out.println("找到房子了");
            //回调数据
            if(Listener!=null){
               Listener.UnFinish("四合院");
            }
        }
         public void SetListener(OnAgentFinishListener Listener){
            this.Listener=Listener;
        }
    }
    
    ②写一个set方法设置对象(此处指setFuPo和setKiJi方法) ③判断并调用相应的方法接收数据(此处指RantHouse里if语句包含的方法)
    6.对于使用者来说:①必须自己定义一个方法接收数据(此处指CallBackUseQQ和CallBackUsePhone方法)解决办法:定义接口,接口中规范接收的方式
    public class Agent {
        public interface UnAgentFinishListener{
            void UnFinish(String des);
        }}
    
    OK,以上就是今天的全部内容了,再见!

    相关文章

      网友评论

          本文标题:Java基础(4)——接口interface

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