java接口的初步了解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、接口的介绍

1.接口概念
    官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

   我的解释:接口可以理解为一种特殊的类,里面全部是由全局常量和公共的抽象方法所组成。接口是解决Java无法使用多继承的一种手段,但是接口在实际中更多的作用是制定标准的。或者我们可以直接把接口理解为100%的抽象类,既接口中的方法必须全部是抽象方法。(JDK1.8之前可以这样理解)

2.接口的特点
    就像一个类一样,一个接口也能够拥有方法和属性,但是在接口中声明的方法默认是抽象的。(即只有方法标识符,而没有方法体)。

接口指明了一个类必须要做什么和不能做什么,相当于类的蓝图。
一个接口就是描述一种能力,比如“运动员”也可以作为一个接口,并且任何实现“运动员”接口的类都必须有能力实现奔跑这个动作(或者implement move()方法),所以接口的作用就是告诉类,你要实现我这种接口代表的功能,你就必须实现某些方法,我才能承认你确实拥有该接口代表的某种能力。
如果一个类实现了一个接口中要求的所有的方法,然而没有提供方法体而仅仅只有方法标识,那么这个类一定是一个抽象类。(必须记住:抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法。接口是百分之百的抽象类)
一个JAVA库中接口的例子是:Comparator 接口,这个接口代表了“能够进行比较”这种能力,任何类只要实现了这个Comparator接口的话,这个类也具备了“比较”这种能力,那么就可以用来进行排序操作了。
3.为什么要用接口
    接口被用来描述一种抽象。
因为Java不像C++一样支持多继承,所以Java可以通过实现接口来弥补这个局限。
接口也被用来实现解耦。
接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的。
 

二、接口的语法实现

1.

为了声明一个接口,我们使用interface这个关键字,在接口中的所有方法都必须只声明方法标识,而不要去声明具体的方法体,因为具体的方法体的实现是由继承该接口的类来去实现的,因此,接口并不用管具体的实现。接口中的属性默认为Public Static Final.一个类实现这个接口必须实现这个接口中定义的所有的抽象方法。

    一个简单的接口就像这样:拥有全局变量和抽象方法。

 为了实现这个接口,我们使用implements关键词去实现接口:

 

其中testClass类实现了我们上面刚才定义的 in1 这个接口,既然你要实现接口,也就是实现接口代表的一种能力,那么你就必须去实现接口给你规定的方法,只有把接口给你规定的抽象方法都给实现了,才承认你这个类实现了这个接口,实现了这个接口代表的某种功能。上图实现了接口中规定的display()方法。
 

    写一个测试类,用来测试一下我们刚才实现的这个接口,因为testclass类的对象t实现了接口规定的display方法,那么自然而然就可以调用display()方法咯。 

 

 

2.接口的进一步理解

我们知道,如果某个设备需要向电脑中读取或者写入某些东西,这些设备一般都是采用USB方式与电脑连接的,我们发现,只要带有USB功能的设备就可以插入电脑中使用了,那么我们可以认为USB就是一种功能,这种功能能够做出很多的事情(实现很多的方法),其实USB就可以看做是一种标准,一种接口,只要实现了USB标准的设备我就认为你已经拥有了USB这种功能。(因为你实现了我USB标准中规定的方法),下面是具体的例子:

先声明USB接口:其中规定了要实现USB接口就必须实现接口规定实现的read( )和write( )这两个方法。

然后在写一个U盘类和一个键盘类,这两个类都去实现USB接口。(实现其中的方法)

这是U盘的具体实现。

 

 

 那么,现在U盘和键盘都实现了USB功能,也就是说U盘和键盘都能够调用USB接口中规定的方法,并且他们实现的方式都不一样。

我们在写一个测试,来看看具体的实现:

 

三.关于接口的几个重点

java中  接口和类是并列的两个结构
public static final 书写时可以省略不写   全局常量
public abstract 抽象方法 书写时可以省略不写

接口通过类去实现(implements)的方式去使用

java类可以实现多个接口  打破了java的单继承性     用,连接  先继承父类
class AA extends BB implements CC,DD,EE,FF
接口与接口之间是继承 并且可以多继承
接口实际上可以看作是一种规范

多态性的体现:(以及匿名操作)

package com.atguigu.Java2;
//多态性

public class USBTest {
    public static void main(String[] args) {
        USBTest usbTest = new USBTest();
        //1.创建了接口的非匿名实现类的非匿名操作
        Flash flash = new Flash();
        usbTest.transferData(flash);
        //2.创建了接口的非匿名实现类的匿名操作
        usbTest.transferData(new Flash());
        //3.创建了接口的匿名实现类的非匿名操作
        USB phone = new USB() {
            @Override
            public void start() {
                System.out.println("飞机开始工作");
            }

            @Override
            public void stop() {
                System.out.println("飞机结束工作");
            }
        };
        usbTest.transferData(phone);
        //4.创建了接口的匿名实现类的匿名操作
        usbTest.transferData(new USB() {
            @Override
            public void start() {
                System.out.println("开始工作");
            }

            @Override
            public void stop() {
                System.out.println("结束工作");
            }
        });
    }
    public void transferData(USB usb){
        usb.start();
        usb.stop();
    }
}

interface USB{
    //常量 定义了 长 宽 最大 最小的传输速度等
    void start();
    void stop();
}

class Flash implements USB{

    @Override
    public void start() {
        System.out.println("u盘开始工作");
    }

    @Override
    public void stop() {
        System.out.println("u盘结束工作");
    }
}

四。代理模式介绍
代理模式的优点之一就是安全性,以翻墙为例,在翻墙的时候用到的代理服务器,就是利用境外的服务器代替我们访问外网数据,并且不暴露我们的真实IP,暴露的是代理服务器的IP。

在java实现代理模式中,假如说B来代理A,A叫做被代理类,B叫做代理类,我们要保护的是被代理类。

一般是在代理类B中创建一个 接口的属性 和一个以接口为参数的构造器,利用接口的多态性,在创建代理类的时候给构造器赋被代理类的地址。

举例:

public class StaticProxyTest {
    public static void main(String[] args) {
        Proxy proxy = new Proxy(new Deng());
        proxy.sing();
    }
}
//接口--明星

interface Star{
    void confer();//面谈
    void singContract();
    void bookTicket();
    void sing();
}


//明星本人--被代理类
class Deng implements Star {

    @Override
    public void confer() {

    }

    @Override
    public void singContract() {

    }

    @Override
    public void bookTicket() {

    }

    @Override
    public void sing() {
        System.out.println("邓浩:来一首走马");
    }
}



//经纪人--代理类
class Proxy implements Star{

    private Star star;

    public Proxy(Star star) {
        this.star = star;
    }

    @Override
    public void confer() {
        System.out.println("经纪人帮我谈");
    }

    @Override
    public void singContract() {
        System.out.println("经纪人帮我签");
    }

    @Override
    public void bookTicket() {
        System.out.println("经纪人帮我定");
    }

    @Override
    public void sing() {
        star.sing();
    }
}


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了接口的基础介绍及简单代理模式的应用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值