庭院深深深几许,杨柳堆烟,帘幕无重数。

——欧阳修《蝶恋花》

1. Java基础之接口

1.1 接口的定义

  1. 是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。
  2. 接口就是多个类的公共的规范,接口是一种引用数据类型(引用数据类型:数组,类,接口。),接口中最重要的内容就是:抽象方法。

1.2 定义一个接口

备注:把class替换成interface。但是.java文件编译之后依然是生成class字节码文件。

1
2
3
4
5
6
7
public interface 接口的名称{

//常量;

//抽象方法;(并不是所有的方法都是抽象方法)

}

定义实现类

  1. 既然说接口中存在大量抽象方法,无法直接创建对象,必须有一个实现类来实现当前的接口。
1
2
3
4
5
6
7
// 1.实现类的格式为: 
public class 类名 implements 接口名{
// 实现所有的抽象方法
}
// 2.接口的实现中,必须实现(重写)接口中的所有的从抽象方法。

// 3.创建实现类,调用具体的放。
  1. 定义一个抽象实现类//如果在抽象的类中,可以重写也可以不重写抽象方法(而接口中必须重写抽象方法)。
  2. 定义一个普通类//如果在普通的类中,必须重写接口中的所有的抽象方法。
  3. 如果实现类中没有覆盖重写所有的抽象方法,那么这个实现类必须是一个抽象类。

1.3 接口和抽象类区别

  1. Animal 抽象类 Dog ex Animal; dog is a Animal; 抽象类是用来抽取是实现类的模板。
  2. Computer 接口 USB implements Computer; computer has a USB; 接口是用来扩展功能的。

1.4 (接口)抽象方法的定义

在任何的java版本里面,接口中只能定义抽象方法,不能定义普通方法。但是扩展了默认方法和静态方法和私有方法。

  1. Public abstract 方法的返回值类型 方法名称(参数列表)
  2. 修饰符:接口中的抽象类必须使用public修饰。如果你不写,默认会加上一个public
  3. abstract修饰当前方法为一个抽象方法。即使没写,默认会加上一个abstract
  4. public abstract 都可以不写。默认加上。
jdk7–接口中只能存在
  1. 常量;其中接口中的成员属性都是常量(全大写,单词用下划线分割),常量在使用的时候必须先赋值。

    1. 不写默认加public static finalpublic static final int VOICE_NUM = 30;
  2. 抽象方法;

jdk8 –接口中扩展的内容
  1. 添加默认方法的功能,解决接口升级所来的大量影响。默认方法可以直接使用实现类的对象来调用

  2. 静态方法—不能使用实现了的对象调用,应该使用接口名.静态方法名来调用。

jdk9 –扩展的内容
  1. 私有方法。私有方法只能在接口中调用–私有方法解决了–抽取公共代码,减少代码冗余,提高了代码的复用性。

1.5 接口的特征

1. 接口的多实现
  1. 如果一类实现的多个接口中出现了相同的抽象方法,只会重写其中的一个方法
  2. 如果一个类实现的多个接口中出现了相同的默认方法,(因为默认方法不需要重写,所以通过当前类的对象调用的时候,会发生冲突。所以jdk8提供了强制的要求) 那么应该将当前的默认方法在本类中重写。
  3. 接口中不允许有static静态代码块,接口中,没有构造方法。
2. 接口的多继承

java是单继承的但是接口是多继承的。如果在继承的多个接口中,出现了每个接口里面有相同默认方法,那么实现的接口中,重写默认方法。可以写成default类型的,也可以写成抽象方法。