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中类不能继承多个父类的局限性!!

接口的总结:

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

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

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

抽象类和接口的对比:

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

两者的相同点:

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

两者不同点:

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

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

到此这篇关于Java十分钟精通接口的使用与原理 的文章就介绍到这了,更多相关Java 接口内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Java中接口Set的特点及方法说明

    目录 接口Set的特点及方法 Set接口及其实现类 Set接口有两个实现类 Set接口:Set存储元素是无序不可以重复的 因为Set接口也是Collection的子接口 1.TreeSet:树状集合.存放有序 2.HashSet:散列集合.高效快速 接口Set的特点及方法 1.特点:无序,不可重复: 2.实现类:添加的方法: add(Object obj); addAll(Collection c); Set中没有修改的方法,可以间接修改,先删除再添加: 删除的方法: remove(Object

  • Java中的接口多继承机制

    目录 问题原因 一个接口可以同时继承多个接口 接口不能实现任何接口 一个类可以实现多个接口 一个类只能继承一个父类 总结: 问题原因 今天在看集合源码的时候,突然看到接口继承接口,觉得有点差异,以前写代码也就是类继承一个类,实现接口.这样写的多了,突然看到接口继承接口就有点诧异了,以为哪里不对.就测试,查阅了一些资料 一个接口可以同时继承多个接口 书写接口测试 public interface Jiekou extends Jiekou1,Jiekou2{ void jiekou(); } pu

  • Java接口回调的本质详解

    本质是JVM指令invokevirtual它涉及到了多态的特性,使用 virtual dispatch 做方法调用 virtual dispatch 机制会首先从 receiver(被调用方法的对象的实际类型)的类的实现中查找对应的方法,如果没找到,则去父类查找,直到找到函数并实现调用,而不是依赖于引用的类型. 我们知道了接口回调的本质是多态,多态的本质是JVM的invokevirtual指令,那么我们就不用拘泥于接口和抽象类或者继承关系这种概念了,我们直接写一个用普通类实现的回调然后再分析它:

  • Java中的抽象类和接口你了解吗

    目录 抽象类 什么是抽象类? 抽象类属于什么类型? 抽象类怎么定义? 抽象类是干什么的? 什么是抽象方法? 非抽象类继承抽象类 抽象类总结 接口 接口的基础语法 接口的实现 接口和多态联合使用 继承和实现同时出现 接口在开发中的作用 类型和类型之间的关系 总结 抽象类 什么是抽象类? 类和类之间有共同特征,将这些共同特征提取出来进一步抽象,就形成了抽象类.由于类是不存在的,所以抽象类无法创建对象. 抽象类属于什么类型? 抽象类也属于引用数据类型. 抽象类怎么定义? [修饰符列表] abstrac

  • Java抽象类和接口使用梳理

    目录 抽象类 抽象方法 抽象类三大原则 接口 接口使用原则 JDK两大内置接口 java.lang.Comparable 比较接口 java.lang.Cloneable 克隆接口 对象的深浅拷贝 抽象类和接口的区别 抽象类 什么是抽象类呢?在现实生活中,我们说“人类”,我们无法对应到具体某个人,同样的,“动物类”.“图形类”这些无法映射到具体的对象的类就是抽象类. 抽象类是普通类的超集,意思就是普通类有的抽象类也有,只是它比普通类多了一些抽象方法而已.这些抽象方法可以有一个,也可以有多个. 它

  • java提供的4种函数式接口

    目录 1.什么是函数式接口 2.java提供四种类型的函数式接口 1.什么是函数式接口 函数接口是只有一个抽象方法的接口,用作 Lambda 表达式的类型.使用@FunctionalInterface注解修饰的类,编译器会检测该类是否只有一个抽象方法或接口,否则,会报错.可以有多个默认方法,静态方法. 有且只有一个抽象方法的接口 场景: 适用于函数式编程场景(使用lambda表达式编程)的接口,函数式接口可以适用于lambda使用的接口. 只有确保接口中有且只有一个抽象方法,java中的lamb

  • Java接口的本质解析

    目录 接口 接口的定义 接口和抽象的区别

  • Java入门基础之抽象类与接口

    目录 一.抽象类 1.什么是抽象类 2.语法规则 3.抽象类的作用 二.接口 1.什么是接口 2.语法规则 3.实现多个接口 4.接口之间的继承 三.接口的使用实例 1. Comparable 接口 2.Comparator接口 3.Clonable接口 四.总结 一.抽象类 1.什么是抽象类 首先我们来回顾一下上一篇文章提到的一个例子:打印图形 class Shape { public void draw() { // 啥都不用干 } } class Cycle extends Shape {

  • Java十分钟精通接口的使用与原理

    何为接口? 官方解释: Java内的接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 个人理解解释: 其实接口可以理解为一种特殊的类,这个类里面全部是由全局常量和**公共的抽象方法(需要重写)所组成.接口是解决Java无法使用多继承的一种手段.我们可以把接口理解为是一个100%的抽象类,既接口中的方法必须全部是抽象方法.反正接口里面都是方法,但是没有方法体,其他类实现这个接口后重

  • Java十分钟精通集合的使用与原理上篇

    目录 什么是集合? 集合分为Collection和Map两种体系 一.Collection接口: 二.Map接口下分为HashMap和TreeMap: 集合总结: Collections工具类: 什么是集合? 比如我们去买超市买很多东西,我们不可能拿一样就去收银台,我们可能是先放到购物车内,然后再统一处理,所以购物车相当于一个容器,可以装很多东西,在Java中的集合也是相当于一个容器,可以装很多数据. 集合继承关系图: 但是这张图太复杂了,我们看一张简便的: 集合分为Collection和Map

  • Java十分钟精通集合的使用与原理下篇

    List集合: ArrayList: 底层是数组结构,储存有序并且可以重复的对象 package SetTest; import java.util.ArrayList; import java.util.Collections; import java.util.List; public class ArrayListTest { public static void main(String[] args) { //创建ArrayList的对象 List<Integer> list = ne

  • Java十分钟精通泛型的使用与原理

    什么是泛型? 简而言之:<>泛型就是用来约束类.方法.属性上的数据类型,比如 List<Integer> list = new ArrayList<Integer>(); new ArrayList这个集合的元素只能添加Integer类型. 为什么需要泛型? Java推出泛型之前,程序员可以构建一个Object类型的集合,该集合能够存储任何的数据类型,而在使用该 集合的时候,需要程序员明确知道每个元素的具体的类型并向下转型,否则容易引发ClassCastExceptio

  • Java十分钟精通内部类的使用

    内部类: 其实内部类顾名思义,就是类中类,一个类里面还有一个类. 内部类分为四种: 普通内部类 静态内部类 方法内部类 匿名内部类 我们一一去了解一下~~ A.普通内部类: 我们先通过代码去了解一下: package InternalClass; /** * 内部类 */ public class Car { public int a = 10; public int b = 20; //外部类的方法 public void method() { System.out.println("我是外部

  • Java十分钟精通Lambda表达式

    目录 1.简介 2.Lambda表达式的使用: 1.在普通方法内的使用 2.带参方法的使用 3.Lambda表达式实现多线程 4.Lambda表达式操作运算 5.Lambda表达式方法引用 6.Lambda表达式对集合的使用 3.总结 1.简介 首先Lambda表达式是属于Java8的 一个新特性,提供Java编程中对于函数式编程的支持,有助于代码的简洁,可以取代大半部分的匿名函数,尤其对于集合的遍历和集合的操作,极大的简化了代码. Lambda表达式的主体: 函数式接口: 注意: Lambda

  • Java十分钟精通进阶工厂方法模式

    目录 一.什么是工厂方法模式? 二.工厂方法模式的优缺点 三.模式的结构与实现 四.工厂方法模式代码实现 五.总结 一.什么是工厂方法模式? 工厂方法模式:也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式. 在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类. 我们知道在现在的真实工厂内分工越来越细,越来越专业化..各种产品有专门的工厂生产,

  • Java十分钟精通进阶简单工厂模式

    目录 1.什么是工厂模式? 工厂模式的定义: 2.简单工厂模式优点和缺点 3.简单工厂的代码实现 4.小结 1.什么是工厂模式? 工厂模式的定义: 定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中.这满足创建型模式中所要求的"创建与使用相分离"的特点. 现实生活中,原始社会自给自足(没有工厂),农耕社会小作坊(简单工厂,民间酒坊),工业革命流水线(工厂方法,自产自销),现代产业链代工厂(抽象工厂,富士康.我们可以看到工厂的变化趋势,但是对于我们来说,看到是

  • Java十分钟精通进阶适配器模式

    目录 1.什么是适配器模式? 2.适配器模式的定义 3.适配器模式的优缺点 4.适配器模式的结构与实现 5.适配器模式的代码实现 6.适配器模式的应用场景 1.什么是适配器模式? 其实适配器这三个字大家应该很熟悉,我们知道苹果公司的手机iPhone已经不提供充电插头了,包装盒内只有一根数据线,那么我们无法单独使用这根数据线进行在220V的插板上充电,因此我们需要重新购买一个适配器来把插板和手机连接起来,这就是适配器. 其实在软件设计中也可能出现,需要开发的具有某种业务功能的组件在现有的组件库中已

  • Java十分钟精通反射机制原理

    什么是反射? 反射机制是在运行状态中,它为Java提供一种"操作对象"的能力,在运行状态下,通过Class文件对象,可以调用到任何类里面的属性.方法.以及构造方法,包括私有的,所有的类在反射机制面前都是透明的 自己的概括:通过Class文件对象可以看到这个类里面的所有东西,并且可以使用和修改 反射的前提是获取Class文件对象((字节码对象),那么一共有三种方式获取: Class.forName("全类名") ----通过Class类的静态方法(最常用) 类名.cl

随机推荐