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("一部分男人没有时间学习");
    }
}