本章目标

1. 接口的语法

2. 接口的应用

3. 接口和抽象类的区别

4. jdk1.8 接口新特性

5. 匿名内部类

本章内容

一、接口语法:

1. 概念,

接口是一种规则和标准,而这些规则和标准需要实现类实现,侧重于can do

2. 接口的实现:

使用implements关键字

说明:

public interface 接口名称 {

全局常量;

公有抽象方法;

}

接口中定义的属性,默认为:public static final

接口中定义的方法,默认为:public abstract

接口中没有构造器

接口不能被实例化,主要作用就是被实现类实现

一个类可以实现多个接口

一个类既可以实现多个接口也可以同时继承一个类,但是继承需要写到实现的前面,先继承后实现

一个接口可以继承多个接口

二、接口应用场景

1、有很多重复代码,但是没有办法用is a的原则找到一个共同的父类,我们可以考虑将重复代码所体现的能力提取到接口中,让不同的实现类实现,调用者传递不同的实现类对象,提高项目的可扩展性和可维护性

2、打补丁 ,规定可以做什么,对已有功能进行扩展,但是并不想修改已有类型或者并不想让继承体系变得复杂,就可以使用接口扩展以后的功能

分析:

防盗门是一个门 ——> is a 的关系

不是所有的门都有防盗能力,防盗门可以上锁,可以开锁

如果使用继承,将门分为防盗门和普通门,会导致继承关系复杂,使用接口表示防盗门的这种能力

Day16接口 - 图1

原始的手机,可以发短信,通电话。随着发展,

手机增加了功能:音频、视频播放、拍照、上网

3、提供约定,主体结构使用接口进行搭建(面向接口开发)

三、接口和抽象类的区别:

  1. 接口中不能写实例属性,但是抽象类中可以写实例属性,如果说在父类中想定义一些实例属性体现所有子类通用的属性,那么只能选择使用抽象类,如果没有上述需求,接口和抽象类都可以,那么优先使用接口,因为接口会更灵活一些。
  2. 抽象类中可以写构造方法,接口没有构造器
  3. 接口和类之间的关系是实现关系,不一定满足is a的原则,但是抽象类是属于继承体系,需要满足is a的原则
  4. 接口和接口之间可以有继承关系,并且是多继承,类和类之间的继承关系是单继承

四、Jdk1.8之后可以在接口中定义非抽象方法:default方法以及静态方法

  1. 静态方法:
    使用接口名称调用
  2. Default方法

如果一个类同时实现接口A和B,接口A和B中有相同的default方法,这时,该类必须重写接口中的default方法

  1. 1. public interface A {
  2. 3. public default void test(){
  3. 5. System.out.println("我是接口a中的静态方法");
  4. 7. }
  5. 8. }
  6. 9. interface C {
  7. 11. public default void test(){`
  8. 13. System.out.println("我是接口c中的静态方法");
  9. 15. }
  10. 16. }
  11. 17. public class B implements A,C{
  12. 18. public static void main(String[] args) {`
  13. 20. B b=new B();
  14. 22. }
  15. 23. @Override
  16. 24. public void test() {
  17. 25. // TODO Auto-generated method stub`
  18. 26. C.super.test();
  19. 27. }
  20. 28. }

五、内部类

匿名内部类

匿名内部类在创建的时候使用一次,必然是一个实现类或者子类,每次创建对象都想对接口中的方法或者父类中的方法做不同的实现,可以考虑使用匿名内部类