Java之接口(interface)的理解
1.接口在Java中使用interface关键字来定义
2.在Java中接口和类是并列的结构
3.如何定义接口?定义接口中的成员
3.1 jdk7以及以前:只能够定义全局常量和抽象方法
全局常量:public、static、final(但是书写时,可以省略不写)
抽象方法:public、abstract(可以省略不写)
3.2 jdk8:除了定义全局常量和抽象方法以外,还可以定义静态方法、默认方法
4.接口中不能定义构造器。意味着接口不能实例化
5.Java开发中,接口通过让类去实现(implements)的方式来使用
如果实现类覆盖了接口中所有的抽象方法,则此实现类就可以实例化
如果实现类没有覆盖接口中所有抽象方法,则此实现类任然为一个抽象类
如果实现类的时候,该接口有继承性,该实现类需要去覆盖接口和父接口的所有抽象方法,则此实现类就可以实例化
6.Java类可以实现多个接口,弥补了Java类的单继承性的局限性
7.有继承有实现的类格式:
class 子类名 extends 父类名 implements 接口名1,接口名2
8.接口与接口之间可以多继承
9.接口的具体使用,可以体现多态性
10.接口,实际上可以看做是一种规范
/** * 接口的使用 */ public class InterfaceTest { public static void main(String[] args) { //报错,因为是默认加了public static final,final修饰的属性无法修改 //Person.name = "李四"; System.out.println("学生的最多学习时长"+Student.studyMaxTime); Student student =new Student("小明"); student.studyMethod(); } } //声明接口 interface Study{ //接口中不能定义构造器 //定义全局常量 public static final int studyMaxTime = 199; //省略了public static final int studyMinTime =10; //定义抽象方法 public abstract void studyMethod(); //省略了public abstract void studyDomain(); String getName(); } interface Play{ void play(); } //使用具体的class去实现接口 class Student implements Study,Play{ //重写了接口Person中的所有的抽象方法 private String name; public Student(String name){ this.name = name; } @Override public void studyMethod(){ System.out.println("聪明的学生有较好的学习方式"); } @Override public void studyDomain() { System.out.println(this.name+" run"); } @Override public String getName() { return this.name; } @Override public void play() { System.out.println("学生没有时间玩耍"); } } abstract class Man implements Study{ //没有重写接口Person所有的抽象方法,只能表明是抽象类,不然就报错了 @Override public void studyMethod(){ System.out.println("一部分男人没有时间学习"); } }