美文网首页
接口(interface)

接口(interface)

作者: 冯宏志 | 来源:发表于2020-12-11 14:18 被阅读0次
image.png

接口的使用

  • 接口使用interface来定义。

  • Java中,接口和类是并列的结构。

  • 如何定义接口,定义接口中的成员
    1、 JDK7以前,只能定义全局常量抽象方法
    全局常量public static final,但是书写时可以省略
    抽象方法public abstract
    2、 JDK8,除了定义全局常量抽象方法之外,还可以定义静态方法默认方法

  • 接口中不能定义构造器,因此接口不能实例化

  • Java开发中,接口通过让类去实现(implements)的方式来使用
    如果实现类覆盖了接口中所有的抽象方法,则此实现类就可以实例化
    如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

  • Java类可以实现多个接口------>弥补了Java单继承的局限性
    格式:class AA extends BB implements CC,DD,EE

  • 接口与接口之间可以继承,而且可以多继承interface AA extends BB,CC

  • 接口的具体使用,体现多态性

  • 接口,实际上可以看做是一种规范

package com.atguigu.java;

public class InterfaceTest {
    public static void main(String[] args) {
        System.out.println(Flyable.MIN_SPEED);
    }
}

interface Flyable{
    public static final int MAX_SPEED = 7900;
    int MIN_SPEED = 1;//默认是全局常量,省略了public static final
    
    public abstract void fly();
    
    void stop();//默认是抽象方法,省略了public abstract
}

class Plane implements Flyable{     //实现了所有的抽象方法,可以实例化

    @Override
    public void fly() {
        System.out.println("fei");
        
    }

    @Override
    public void stop() {
        System.out.println("ting");
    }
}

abstract class kite implements Flyable{     //没有实现所有的抽象方法,要声明为抽象类,不能实例化

    @Override
    public void fly() {
        // TODO Auto-generated method stub
        
    }   
}

创建接口的匿名实现类的对象

Computer computer = new Computer();
        //1.创建了接口的非匿名实现类的非匿名对象
        Flash flash = new Flash();
        com.transferData(flash);
        
        //2.创建了接口的非匿名实现类的匿名对象
        com.transferData(new Printer());
        
        //3.创建了接口的匿名实现类的非匿名对象
        USB phone = new USB() {
            @Override
            public void start() {
                System.out.println("开始工作");
            }
            @Override
            public void stop() {
                System.out.println("结束工作");
            }
        };
        //4.创建了接口的匿名实现类的匿名对象
        com.transferData(new USB() {
            @Override
            public void start() {
                System.out.println("开始工作");
            }
            @Override
            public void stop() {
                System.out.println("结束工作");
            }
        });

接口的应用:代理模式(proxy)

  • 应用场景
    1、安全代理
    2、远程代理
    3、延迟加载
  • 分类
    静态代理
    动态代理:JDK自带动态代理,需要反射等知识。
package com.atguigu.java;

public class NetWorkTest {
    public static void main(String[] args) {
        Server server = new Server();
        ProxyServer proxyServer = new ProxyServer(server);//体现了接口的多态性:形参类型是NetWork接口,实际传入Server类的对象
        proxyServer.browse();
    }
}

interface NetWork{
    public void browse();
}

//被代理类
class Server implements NetWork{
    @Override
    public void browse() {
        System.out.println("真实的服务器访问网络");
    }
}

//代理类
class ProxyServer implements NetWork{
    private NetWork work;
    
    public ProxyServer(NetWork work) {
        this.work = work;
    }
    @Override
    public void browse() {
        check();
        work.browse();
        
    }
    
    public void check() {
        System.out.println("联网之前的检查工作");
    }
}

工厂模式

工厂模式:实现创建者和调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

JDK8接口新特性

package com.atguigu.java8;

public class SubClassTest {
    public static void main(String[] args) {
        SubClass s = new SubClass();
        //1、接口中定义的静态方法,只能通过接口来调用
        CompareA.method1();
        //2、通过实现类的对象,可以调用接口中的默认方法
        //3、如果重写了接口的默认方法,则调用重写后的方法
        s.method2();
        //4、如果子类(或实现类)继承的父类和实现的接口中声明了同名同参数的方法
        //那么子类在没有重写此方法的情况下,默认调用的是父类的方法 --->类优先原则
        s.method3();
        //5、如果实现类实现了多个接口,而这多个接口中定义了同名同参数的默认方法
        //那么在实现类没有重写此方法的情况下,报错-->接口冲突
        //这就需要我们必须在实现类中重写此方法
    }
}

class SubClass extends SuperClass implements CompareA{
    public void method2() {
        System.out.println("SubClass");
    }
    
    public void method3() {
        System.out.println("Subclass:深圳");
    }
    
    //6、如何在子类(或实现类)的方法中调用父类、接口中被重写的方法
    public void myMethod() { 
        method3();//调用自己定义的重写的方法
        super.method3();//调用的是父类声明的方法
        CompareA.super.method3();//调用接口中的默认方法
        
    }
}

相关文章

  • 接口

    interface 接口 implements 类实现接口 public interface 接口名{ 接口的成员...

  • 学习TypeScript 接口

    TypeScript 接口定义 interface interface_name {} 实例 联合类型和接口 接口...

  • java萌新入门之事件监听

    1.接口 1.1 接口的定义 定义接口的关键字:interface 格式: public interface 接口...

  • 2020-07-23(接口)

    1,接口特点 * a:接口用关键字interface表示, interface 接口名 {} * b:类实现接口用...

  • 2020-06-21接口

    接口 接口的特点 接口用关键字interface修饰:public interface 接口名{} 类实现接口用i...

  • java中的接口

    接口的特点: A:接口用关键字interface表示;格式:interface 接口名{}B:类实现接口用imp...

  • Java 接口(interface)

    接口用关键字interface表示格式:interface 接口名 {} 类实现接口用implements表示格式...

  • Java基础-接口

    1.接口的特点: A:接口用关键字interface表示 interface 接口名 {}B:类实现接口用i...

  • 接口(interface)

    建立一个User接口 建立UserImpl类 创建测试类 编译结果如下图

  • 接口(interface)

    接口(interface) 是与类并行的一个概念1.接口可以看做是一个特殊的抽象类。是常量与抽象方法的一个集合,...

网友评论

      本文标题:接口(interface)

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