java中的接口

接口的概述

  接口技术用于描述类具有什么功能,但并不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则,标准。

简单来说接口就是比抽象类还要抽象。(在接口中的方法默认有abstract)

接口的定义

  定义接口使用关键字interface

    interface 接口名 {};

  类与接口时实现关系,用implements表示

    class 类名 implements 接口名

创建接口的方式:在和创建类一样,只不过是创建一个接口文件

 栗子:

创建一个

package dome4;

public interface ab {   //定义一个接口
    public abstract void eat();   //接口方法默认有abstract
}

创建一个类实现接口

package dome4;

public class q implements ab{
    @Override   //重写
    public void eat() {
        System.out.println("啃骨头");
    }
}

测试类

package dome4;

public class Test {
    public static void main(String[] args) {

        //ab sm= new ab();
        ab sm=new q();
        sm.eat();
    }


}

接口创建对象的特点

  接口不能实例化,如果要实例化接口,可以通过多态的方式实例化子类对象

  接口的子类(实现类)可以是抽象类,也可以是普通类

接口继承关系的特点

  接口与接口之间的关系

    继承关系,可以多继承,格式;

    接口extends 接口1,接口2,接口3......

  继承和实现的区别

    继承体现的是“is a”的关系,父类中定义共性内容

    实现体现的是“like a"的关系,接口中定义扩展内容

类与接口之间的关系

  类与类之间:

    继承关系,只能单继承,不能多继承,但是可以多层继承

  类与接口之间:

    实现关系,可以单继承,不能多继承,但是可以多层继承

  接口与接口之间:

    继承关系,可以单继承,也可以多继承

  总结:

    对于一个类来讲,它的父类(继承关系)中定义的都是:共性内容

    对于一个类来讲,它的接口(实现关系)中定义的都是:扩展内容

接口创建对象的特点

  接口不能实例化,如果要实例化接口,可以通过多态的方式实例化子类对象

  接口的子类(实现类)可以是抽象类,也可以是普通类

接口继承关系的特点

  接口与接口之间的关系

    继承关系,可以多继承,格式;

    接口extends 接口1,接口2,接口3......

  继承和实现的区别

    继承体现的是“is a”的关系,父类中定义共性内容

    实现体现的是“like a"的关系,接口中定义扩展内容

类与接口之间的关系

  类与类之间:

    继承关系,只能单继承,不能多继承,但是可以多层继承

  类与接口之间:

    实现关系,可以单继承,不能多继承,但是可以多层继承

  接口与接口之间:

    继承关系,可以单继承,也可以多继承

  总结:

    对于一个类来讲,它的父类(继承关系)中定义的都是:共性内容

    对于一个类来讲,它的接口(实现关系)中定义的都是:扩展内容

接口成员方法的特点

  成员变量

    接口中只有成员常量,没有成员变量,因为接口中所有的变量都有默认的修饰符public static final

  成员方法

    JDK7及以前只有公有的、抽象方法:在方法前面都会默认有public abstract如果没写,则系统会默认补上

      public abstract 返回值类型 方法名()

    JDK8以后,可以有默认方法和静态方法:如果是静态方法则需要用public default来进行声明,而静态方法直接用static就行了

      非静态方法:public default 返回值类型 方法名(){}

      静态方法:static 返回值类型 方法名(){}

    JDK9以后,可以有私有方法private

      private 返回值类型 方法名(){}

  构造方法

    接口不能够实例化,也没有需要初始化的成员,所以接口没有构造方法

栗子:

ackage dome5;

public interface w {
//    //构造方法
//    public w(); 需要注意的是接口中是没有构造方法的
    //成员常量
    public static final int NUM=10; //成员常量一般用大写
    //JDK7及以前的写法
    void eat();
    public abstract void eat2();  //默认会有public abstract
    //JDK8多了两种写法
    public static void open(){    //静态方法
        System.out.println("我是JDK8的新特性");
    };
    public default void open2(){    //非静态方法
        System.out.println("我是非静态方法");
    }
    //JDK9可以有私有方法
    private void openj(){
        System.out.println("我是JDK9的新特性");
    }
}
原文地址:https://www.cnblogs.com/zxy6/p/14240124.html