java09-接口

文章详细介绍了Java中接口的概念和使用,包括接口的定义、接口与类的关系、接口的实现以及Java8的新特性。同时,文章通过USB接口的示例展示了接口在多态性中的应用,并提到了代理模式和工厂模式作为接口在实际开发中的应用场景。
摘要由CSDN通过智能技术生成

一.使用说明

1.接口使用interface来定义

2.Java中,接口和类是并列的两个结构

3.如何定义接口:定义接口中的成员

》jdk7及以前:只能定义全局常量和抽象方法

          *全局常量:public static final 的,但是书写时,可以省略不写

          *抽象方法:pubic abstract的

》jdk8:除了定义全局常量和抽象方法之外,还可以定义静态方法、默认方法

4.接口中不能定义构造器的!意味着接口不可以实例化

5.java开发中,接口通过让类去实现(implement)的方式来使用

》如果实现类覆盖了接口中的所有抽象方法,则此实现类就可以实例化

》如果实现类没有覆盖接口中所有的抽象方法,则此实现类仍为一个抽象类

6.java类中可以实现多个接口  ---》弥补了java单继承的局限性

    》格式:class A A extends BB implements CC,DD,EE

7.接口与接口之间可以继承,而且可以多继承

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

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

二:举例:

例1:usb接口

//定义usb接口
interface Usb{
    public void start();
    public void stop();
    
}
//u盘实现usb接口
class Flash implements Usb{

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("usb 开始工作");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("usb 结束工作");
    }
    
}
//打印机实现usb接口
class Print implements Usb{

    @Override
    public void start() {
        // TODO Auto-generated method stub
        System.out.println("打印机 开始工作");
    }

    @Override
    public void stop() {
        // TODO Auto-generated method stub
        System.out.println("打印机  结束工作");
    }
    
}
//电脑使用usb接口传输数据
class  Computer{
    public void tansfer(Usb usb) {
        usb.start();
        System.out.println("具体传输数据的细节");
        usb.stop();
    }
    
}
public class UsbTest {
    public static void main(String[] args) {
        Computer c = new Computer();
        c.tansfer(new Flash());
        c.tansfer(new Print());
    }

}

三:java8 新特性

知识点1:接口中定义的静态方法只能通过接口来调用

知识点2:通过实现类的对象,可以调用接口中的默认方法,如果实现类重写了接口的默认方法

调用时,仍调用的是重写以后的方法

知识点3:如果子类(实现类)继承的父类和实现的接口中声明了同名同参数的默认方法,那么

子类在没重写此方法的情况下,默认调用是的父类同名同参数的方法--》类优先原则

知识点4:如果实现类实现了多个接口,而这多个接口定义了同名同参数的默认方法,

那么在实现类没重写此方法的情况下,报错--》接口冲突,要求必须要在实现类中重写此方法

知识点5:如何在子类(或实现类)的方法中调用父类、接口中被重写的方法

public  void  myMethod(){

method3();//调用自己定义的重写的方法

super.method3();//调用的是父类中声明的

//调用接口中的默认的方法

CompareA.super.method3();

CompareB.super.method3();

}

4面试题:

抽象类和接口的异同?

相同点: 不能实例化;都可以包含抽象方法的

不同点:

1)把抽象类和接口(Java7、Java8、java9)的定义、内部结构解释说明

2)类:单继承性  接口:多继承  ,类与接口:多实现

五:应用场景:

1.代理模式: 是java 开发中使用较多的一种设计模式,代理设计就是为其他对象提供一种代理以控制对这个对象的访问

2举例:

interface Network{
    void browse();
}
class Server implements Network{

    @Override
    public void browse() {
        // TODO Auto-generated method stub
        System.out.println("服务器要实现浏览功能");
    }
}
    class ProxServer implements Network{
     private Network network;
     
        public Network getNetwork() {
        return network;
    }
    public void setNetwork(Network network) {
        this.network = network;
    }
        @Override
        public void browse() {
            check();
            network.browse();
            
        }
        public void check() {
            System.out.println("前期检查工作");
        }
    }
    

public class TestProxy {
    public static void main(String []args) {
        
        
        Server server = new Server();
        ProxServer proServer = new ProxServer();
        proServer.setNetwork(server);
        proServer.browse();
        
    }

}

3.工厂模式:实现了创建者与调用者的分离,即将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的,包括 简单工厂模式,工厂方法模式,抽象工厂模式

4.举例:

interface Car{
    void run();
}
class Audi implements Car{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("奥迪车在快速的奔跑!");
    }
    
}
class Bydi implements Car{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("比亚迪车在快速的奔跑!");    
    }
    }
class Factory{
    public static  Car getInstance(String type) {
        if ("aodi".equals(type)) {
            return new Audi();
        }else if("Bydi".equals(type)) {
            return new Bydi();
        }else {
        return null;
        }
    }
    
}

public class TestFactory {
    public static void main(String[] args) {
        Audi ao=(Audi) Factory.getInstance("aodi");
        Bydi bi=(Bydi)  Factory.getInstance("Bydi");
        ao.run();
        bi.run();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值