这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战
前言
这次我们讲一下java基础中大家最熟悉的一个东西,那就是接口,接口被广泛用于java开发中,在各大框架中尤其是Spring全家桶,大量使用抽象的概念,把行为提出来规范化,使得代码更加的简洁易读。
对于java开发者而言不仅要学会接口,更要精通接口,这是程序抽象的必修课。
认识接口
下面内容主要带大家了解一下接口的各个特性以及对比抽象类它们有那些区别,并且我会使用工作中与Spring联动用到的java接口使用方式例子。
接口的特性
无法new,无法创建实例
接口和抽象类一样都不可以直接通过new 字段来实例对象。
字段
接口的字段,也就是成员变量必须是 static final修饰,默认在接口定义成员变量自动加上这个修饰。注意!接口中的字段必须是常量,也就是你定义完要记得赋值,不然会编译报错
public interface Bird {
int name = 0;
void flay();
}
方法
方法与成员变量一样,它门在写入接口时就已经被定义了某些特殊字段,接口方法是被默认定了abstract修饰符,这个相信大家也很熟悉了,没错他就是抽象方法。所以接口在面试题中经常会拿来跟抽象类作比较。
特殊方法体 default
在java1.8之后新增了一个方法叫做default ,把他写在接口方法前面修饰,接口方法就变成跟抽象方法一样可以写自己的方法体了
/**
* <p>
*
* </p>
*
* @author MouthMouth
* @since 2021/11/11
*/
public interface Bird {
int name = 0;
void flay();
default Object pupu(){
System.out.println("pupu~");
return null;
}
}
多继承
java的类是不允许多继承的,但是接口是个例外,接口允许继承多个,但是多个必须是也是接口。
接口的实现
在类上定义interface字段来使得类变为接口类,接口的实现者必须要重写接口中的方法。抽象类中方法如果没有方法体就必须要实现,但是抽象类中有方法体,那么继承就不需要实现方法体,这是两者的一个区别。
import factory.simple.Car;
/**
* <p>
*
* </p>
*
* @author MouthMouth
* @since 2021/5/20
*/
public class test implements Bird {
public static void main(String[] args) {
}
@Override
public void flay() {
}
}
从上面看出我们只实现了fly方法,并没有实现pupu方法,这一点就和抽象类的方法一样,因为接口中的pupu方法被default修饰了,所以实现者就不用实现default方法。
接口的实例化
接口在上面也讲了是不允许被实例化的,但是接口的实现类是可以被new出来实例化的,这点与抽象类是一样的哦。
/**
* <p>
*
* </p>
*
* @author MouthMouth
* @since 2021/11/11
*/
public class BlueBird implements Bird {
@Override
public void flay() {
System.out.println("blue fly!!");
}
}
public static void main(String[] args) {
Bird bird = new BlueBird();
bird.flay();
}
总结
- 接口与抽象类一样不允许new
- 接口可以定义字段,但是字段必须是常量
- 接口可是允许多继承的哦