Java

1.接口

1)什么是接口

接口也是java中的一种数据类型
刚接触接口时,可以将接口
看做是特殊的抽象类

2)为什么需要接口

因为java中允许一个类
实现多个接口
从而间接的实现java中的多继承

3)怎么样定义接口

将定义类的class关键字替换为
interface即可

4)编写一个接口

4.1)在接口中编写属性

 这个属性会变为公有静态常量
 既被public static final修饰的  

4.2)在接口中定义方法

 这个方法会变为公有抽象方法
 既被public abstract修饰  

4.3)在接口中编写静态方法

      public static 方法名 [throws 异常列表]

由于Java中可以同时实现多接口,
如果2个接口同时存在同名,同参数的静态方法
则同子类.静态方法,将不知道访问哪一个。
因此不允许使用【子类.父类静态方法】形式访问,也不能通过【super方法.父类静态方法】访问
只可以父类名访问静态方法

InterA interA = new CImpl();
InterA.method(); //只可以父类名访问静态方法

4.4)在接口中编写默认方法

  • JDK8之后允许存在默认方法
//default不能省略
public default void defaultMethod(){

} 
  • 子类重写接口默认方法时,必须去掉default。
@Override
public void defaultMethod(){
System.out.println("子类A中的默认方法,必须去掉default修饰符");
}

接口默认方法注意事项

  • java中允许类实现多个接口,这就可能造成默认方法冲突。
  • 当一个类实现多个接口时,如果多个接口中的默认方法冲突时,编译器会提示我们接口冲突,让我们自行解决(子类必须其中一个接口的方法)
  • 当一个接口实现另一个接口时,子接口与父接口存在相同的默认方法时,将采用父类接口的默认方法
  • 当一个类既继承父类又实现接口时,如果父类中的方法与接口中的默认方法冲突,将会执行父类中的方法,而不是接口中的方法,这种情况被称为类优先选择,方便兼容jdk8之前的版本

子类实现多个接口时,如果存在同名的默认方法,子类将不知道继承哪一个,因此编译器要求子类必须重写父类中的默认方法;不过注意的是,子类不能用default修饰,default只能修饰接口中的默认方法。

5)实现一个接口

定义一个类实现一个接口
要重写接口中的所有方法
除非这个类是抽象类

  class Aoo implements <接口名>{

  }
  // 如果这个类有继承父类
  class Aoo extends Boo 
            implements <接口1>,<接口2>,<接口N...>{
  }

一个类可以实现多个接口
接口名之间用,分隔

6)使用接口的原则

  • 使用继承的原则是符合is-a的关系
  • 使用接口的原则是符合has-a的关系

7)使用接口类型调用方法

  • 实例化实现类对象赋给接口引用也是向上造型
  • 接口类型的引用只能调用到接口中声明的方法

8)使用接口的注意事项

  • 8.1)接口可以继承接口

     使用extends关键字,
     继承多个接口用,分隔
  • 8.2)接口特别适合用于设计 程序中的各种功能 这个设计的过程称之为 面向接口编程 就是只写接口不写实现
  • 8.3)工作中的接口 就是今天我们的工作任务


// 面向接口示例

interface AAA{

   boolean login(String name,String pwd);

   List getUsers();

   void addUser(User u);
   ...
   ...
}

public class AAAImpl implement AAA{


}

作业

  • 定义接口Fly飞

     接口中方法flying();
  • 定义接口Swim游泳

     接口中方法swimming();
  • 定义抽象父类Bird鸟

     编写抽象方法layEggs()
  • 定义Sparrow麻雀类

     继承Bird实现Fly接口
  • 定义Duck鸭子类

     继承Bird实现Fly和Swim接口
  • 定义Bat蝙蝠类

     实现Fly接口

评论

This is just a placeholder img.