IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java 真的不难(八)接口 -> 正文阅读

[Java知识库]Java 真的不难(八)接口

接口:

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

个人理解解释:
其实接口可以理解为一种特殊的类,这个类里面全部是由全局常量和**公共的抽象方法(需要重写)所组成。接口是解决Java无法使用多继承的一种手段。我们可以把接口理解为是一个100%的抽象类,既接口中的方法必须全部是抽象方法。反正接口里面都是方法,但是没有方法体,其他类实现这个接口后重写方法体即可。

为什么要用接口

  • 接口被用来描述一种抽象。
  • Java可以通过实现接口来弥补一个类不能多继承的局限
  • 接口也被用来实现解耦
  • 接口被用来实现抽象,而抽象类也被用来实现抽象,为什么一定要用接口呢?接口和抽象类之间又有什么区别呢?原因是抽象类内部可能包含非final的变量,但是在接口中存在的变量一定是final,public,static的。

接口怎么写

创建接口的关键字interface
实现接口的关键字implements

public interface StudentTest {   //StudentTest:接口名称
     
    public void Study();      //接口内的方法,在接口内不提供方法体。
}
//这就是一个简单的接口

实现接口

public class student implements StudentTest{
    
    @Override
    public void Study(){
        System.out.println("我继承了StudentTest,并重写了接口内的Study方法");
    }
}

//测试类
public class TestMain {
    public static void main(String[] args) {
        student s = new student();
        s.Study();
    }
}

//输出:我继承了StudentTest,并重写了接口内的Study方法

//代码解释:
//1、用interface创建StudentTest接口,接口内有Study方法
//2、新建student类,用implements实现StudentTest接口
//3、重写Study()方法
//4、测试类测试

注意实现一个接口,需要重写这个接口里面的所有方法!!!!

上述代码和解释完成了对接口的初步理解,下面我们对接口有个进一步的理解:

进一步理解接口:

在生活中,我们都有U盘,若要在电脑上对U盘进行读取和写入,我们需要使用USB接口。一台电脑有多个USB接口,所以我们先定义两个USB接口,并且有两个方法,分别是读取和写入:

//第一个USB接口
public interface USB1 {   
    public void read_1();  //读取方法
    public void write_1();  //写入方法
}


//第二个USB接口
public interface USB2 {
    public void read_2();  //第二个U盘的方法
    public void write_2();
}

然后我们有一个U盘,因为U盘使用的是标准USB接口,所以两个USB接口我们都可以进行读取和写入,U盘类就实现了USB1和USB2两个接口,并重写了方法:

package instance_test;

public class YOUPAN implements USB1,USB2{
    @Override
    public void read_1() {
            System.out.println("这是用第一个USB的读取接口");
    };

    @Override
    public void write_1() {
            System.out.println("这是用第一个USB的写入接口");
    };

    @Override
    public void read_2() {
            System.out.println("这是用第二个USB的读取接口");

    };

    @Override
    public void write_2() {
            System.out.println("这是用第二个USB的写入接口");
        };

    }

//意思是U盘只要符合USB接口标准,使用任意一个都可以操作方法

然后我们开始使用两个接口:
测试类:

public class Test_Main {
    public static void main(String[] args) {
        YOUPAN y = new YOUPAN();
        y.read_1();
        y.write_1();
        y.read_2();
        y.write_2();
    }
}

结果:

/*
这是用第一个USB的读取接口
这是用第一个USB的写入接口
这是用第二个USB的读取接口
这是用第二个USB的写入接口
*/

然后我们现在有一部手机,有根数据线,数据线两头分别是USB和Type_C,若要用数据线对手机进行充电和更新数据,就同时要实现USB和Type_C两个接口,所以我们新建一个Type_C接口:

public interface Type_C {     //Type_C接口

    public void Charge();    //充电
    public void Update();   //更新数据

}

然后新建一个手机类,有根数据线,并且实现了USB接口和Type_C接口:

public class phone implements USB1,Type_C{   //数据线实现 USB1,Type_C接口
    
    @Override
    public void read_1() {
    	System.out.println("手机用第一个USB的接口和")
	    //数据线使用USB接口的同时,会给一句提示语
    }
	
	
    @Override
    public void write_1() {
    	System.out.println("手机用第一个USB的接口和")
    }

    @Override
    public void Charge(){
        System.out.println("使用Type_C接口充电");
        //数据线使用Type_C接口的同时,会给一句提示语
    }

    @Override
    public void Update(){
        System.out.println("使用Type_C接口更新数据");
    }

}

接着测试手机类:

public class Test_Main {
    public static void main(String[] args) {

        phone p = new phone();

        p.read_1();
        p.Charge();
        System.out.println("----------------");
        p.read_1();
        p.Update();
    }
}

结果:

/*
手机用第一个USB的接口和
使用Type_C接口充电
----------------
手机用第一个USB的接口和
使用Type_C接口更新数据

*/

这样一个类就实现了对多个接口的实现,恰恰解决了Java中类不能继承多个父类的局限性!!

接口的总结:

  1. 不能直接实例化接口,因为接口内方法都是抽象的,没有方法体,需重写
  2. 一个类可以实现多个接口
  3. 一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法
  4. 接口中所有的方法都是抽象的和public的,所有的属性都是public、static、final的
  5. 接口用来弥补类无法实现多继承的局限
  6. 接口也可以用来实现解耦(关于解耦可以参考这篇文章:解耦的理解
  7. 接口也可以继承,并且可以多继承(没错,接口可以多继承!)
public interface USB3 extends USB1,USB2{
} //这句多继承语法是OK的

大家看到这里,已经知道接口也是一个抽象的,那么接口和抽象类有什么区别呢?

接口和抽象类的区别(这也是面试题,整理自互联网):

抽象类和接口的对比:

  • 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。
  • 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。

两者的相同点:

  • 接口和抽象类都不能实例化
  • 都位于继承的顶端,用于被其他实现或继承
  • 都包含抽象方法,其子类都必须覆写这些抽象方法

两者不同点:

在这里插入图片描述

备注::Java8中接口中引入默认方法和静态方法,以此来减少抽象类和接口之间 的差异。
现在,我们可以为接口提供默认实现的方法了,并且不用强制子类来实现它。 接口和抽象类各有优缺
点,在接口和抽象类的选择上,必须遵守这样一个原则:

  • 行为模型应该总是通过接口而不是抽象类定义,所以通常是优先选用接口,尽量 少用抽象类
  • 选择抽象类的时候通常是如下情况:需要定义子类的行为,又要为子类提供通用 的功能。

在这里插入图片描述

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-01-08 13:51:00  更:2022-01-08 13:51:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:59:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码