接⼝的介绍

接⼝

基本概念

在现实生活中,USB接口实际上是某些企业和组织制定的一种约定或标准,规定了接口的大小、形状等。按照该约定设计的各种设备,如U盘、USB风扇、USB键盘都可以插到USB接口上正常工作。USB接口相关工作是按照如

下步骤进行的。

1.约定USB接⼝标准。

2.制作符合USB接⼝约定的各种具体设备。

3.把USB设备插到USB接⼝上进⾏⼯作

Java中接口的作用和生活中的接口类似,它提供一种约定,使得实现接口的类在形式上保持一致。

如果抽象类中所有的方法都是抽象方法,就可以使用Java提供的接口来表示。从这个角度来讲,接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念也不同。

约定好规范,然后按照规范来做,接⼝就是定义规范

简单来说,接⼝是⼀个不能实例化的类型

声明

接口类型的定义类似于类的定义,语法格式如下。

public interface 接口名{
    //接口成员
}

语法解析:

1.和抽象类不同,定义接⼝使⽤interface修饰符。

2.接⼝的访问权限是public或包访问权限,与类的访问权限类似。

3.⼀个接⼝可以继承其它接⼝,称为⽗接⼝,并且接⼝可以多继承。它将继承⽗接⼝中声明的常量和抽象⽅法。

4.成员列表中的成员变量声明 [public] [static] [final] 数据类型 变量名 = 常量; 即接⼝中成员变量默认都是publicstatic final 的,因此 public static final 可以省略。

5.成员列表中的成员⽅法声明 public abstract 返回值类型 方法名(参数列表); 即接⼝中的⽅法默认都是public abstract 的,因此 public abstract 可以省略。

与抽象类一样,使用接口要通过子类,子类通过 implements 关键字实现接口。实现接口的语法格式如下:

public 类名 implements 接口名{
	// 实现抽象方法
	// 声明普通方法
	// 声明成员变量
}

语法解析:

1.实现接口使用implements关键字

2.一个类可以实现多个接口,各接口之间用逗号分隔开

3.实现接口的类必须实现接口中定义的所有抽象方法,即使类中不使用某个抽象方法也必须实现它,通常用空方法体实现子类不需要的抽象方法,如果抽象方法有返回值,可返回默认值。

4.接口的实现类允许包含普通方法。

5.在实现抽象方法时需要指定public权限,否则会产生编译错误。

一个普通类只能继承一个父类,但同时能实现多个接口,也可以同时继承抽象类和实现接口。

  1. 接口和类、抽象类是一个层次的概念,命名规则相同。

  2. 修饰符如果是public,则该接口在整个项目中可见。如果省略修饰符,该接口只在当前包中可见。

  3. 和抽象类一样,接口同样不能实例化,但接口中不允许有构造方法。

  4. 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。

  5. 类只能继承一个父类,但可以通过implements实现多个接口。一个类要实现某个接口,那就必须实现接口中的所有方法,否则必须定义为抽象类。若一个类在继承父类的同时又实现了多个接口,extends必须位于implements之前。

    实现多个接口的语法格式如下:

    public 类名 extends 类名 implements 接口1,接口2 {
    
    }
    
  6. 接口与接口之间是继承关系,使用extends关键字,接口可以多继承,多个接口使用,隔开。

    public interface  接口名 extends 接口1,接口2 {
        
    }
    
  7. 接口中成员变量声明形式如下:

    [public] [static] [final] 数据类型 变量名 =;
    
  8. 接口中方法的声明形式如下:

    [public] [abstract] 返回值类型 方法名(参数列表);
    

接口的好处:

  • 弥补了类单继承的不足,一个类同时可以实现多个接口。
  • 让程序可以面向接口编程,这样程序员可以灵活方便的切换各种业务实现。

现在要写一个A类,想让他既是学生,偶然也是司机能够开车,偶尔也是歌手能够唱歌。那我们代码就可以这样设计。

综上所述:接口弥补了单继承的不足,同时可以轻松实现在多种业务场景之间的切换。

新特性

JDK8

在JDK8中default关键字可用于在接口中修饰方法,default修饰的方法可以有具体实现,也只能在接口中实现,default修饰的方法可以被重写。

在JDK8中还可以有static修饰的方法,称为静态方法,类方法可以直接使用接口名.方法名调用,不能被继承。

JDK9

在JDK9中新增private方法,声明只能在本接口中使用的方法。

抽象类与接口的区别
  1. 多继承:子类只能继承一个直接抽象类;子类可以实现多个接口
  2. 实现:子类使用extends继承抽象类;实现类通过implements实现接口
  3. 成员:抽象类中可以有实例成员、静态成员、抽象方法,抽象类中的成员方法不能不能用default关键字修饰;接口中只有常量、抽象方法,JDK8之后新增static 和default方法,JDK9之后新增private方法
  4. 成员变量修饰符:抽象类可以定义变量,也可以定义常量;接口中只能定义常量(public static final修饰的常量)
  5. 子类实现:子类在实现抽象方法是不允许缩小访问权限;实现类在实现抽象方法时必须指定public权限
  6. 构造函数:抽象类可以有构造函数;接口中不能定义构造函数
  7. 最高层:类的最高层是Object;接口中没有最高层
  8. 相同点:两者都不能实例化;都是引用类型;都可以包含抽象方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值