接口的概念:
在Java中,除了抽象类之外,还有比它更为抽象的一种技术,接口技术用于描述类具有什么功能,但并不给出具体的实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则,标准。

Java中接口的定义与使用:
定义接口可以使用关键字interface:

interface 接口名称 {
   }

对于接口的使用,与抽象类相似的一点,就是他们都不能直接创建实例,需要定义子类来实现。类和接口是实现关系,用implements创建。

class 类名 implements 接口名

上述代码表示某类实现于某接口。
另外,接口的子类,也叫实现类,可以是普通类,当然也可以使抽象类。

接口与继承:
接口之间可以实现简单的单继承,也有相对复杂的多重继承关系。

接口 extends 接口A,接口B,接口C,接口.... 

分清继承和实现的关系:
在Java中,继承体现的是"is a"的关系,父类中定义共性的内容,而实现体现的是"like a"的关系,接口中定义扩展功能。

接口的成员特点:
1.接口中只有成员常量,没有成员变量。成员常量,就是指他的值一旦确定,不可以二次更改,否则会报错。
在定义常量时,可以直接如下方式进行定义,也是对的。

public interface USB{
   
	int ID = 1001011;
	}

当然,如果你这样定义,也没错!

public interface USB{
   
	public static final int ID = 1001011;
		}

之所以这样,是因为JavaJDK中本来就定义了默认的public static final关键字的修饰,即使你不写,系统会默认加上,相反,如果手动加上了,那么系统不再进行默认操作。因此,我们一般都直接使用第一种写法,简单快捷。

接口的成员方法:
由于JavaJDK版本的不同,对接口的成员方法的定义也是逐渐优化和增多,方便各种各样灵活的需求。下面简单根据JDK版本进行不同的演示。
1.JDK7之前:只有抽象成员方法

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

2.JDK8中多了一下两种写法:静态和默认成员方法

public static 返回值类型 方法名();
public default 返回值类型 方法名();

3.在后续的JDK9中,增加了私有的成员方法:

public private 返回值类型 方法名();

特别的: 接口中没有构造方法
为什么呢?
其实,前面就有讲到,接口是不允许实例化的,而构造方法就是用来实例化的一种手段,既然不能实例化,也没有需要初始化的成员(怎么理解?接口中只有成员常****量啊,对比一下前面的类和对象中的成员与构造方法的关系就明白了,为什么没有需要初始化的输成员。)那么就没必要多出构造方法来,不然就成抽象类了。

下面通过一个简单的例子,帮助理解接口的定义与使用:
我们假设所有枪械的设计研发都有一个特定的研发规则,那么我可以
首先定义一个接口gun,表示一切枪械的规则。

package OOP_多态;/* *@Author:Tstr *@Date:2020/8/16 21:54 *@from:lenovo *@e-mail:x20135201314boy@126.com */
/*定义接口gun*/
public interface GUN {
   
    //假设弹夹容量最大上限为400发
    int BULLET = 400;
    double BULLET_TYPE1 = 5.56;
    double BULLET_TYPE2 = 7.62;
    String NAME1 = "步枪小王子";
    String NAME2 = "步枪大佬";

    //定义方法,自我介绍
    public abstract void self_introdution();
    public static void result(){
   
        System.out.println("设计符合规则!!");
    }
}

定义实现类:1

/*定义一个实现类:AK类实现于接口GUN*/
public class AK implements GUN{
   
    @Override
    public void self_introdution() {
   
        System.out.println("我是"+NAME2+"AK,我有"+BULLET+"发"+BULLET_TYPE2+"子弹");
    }
    public AK() {
   
        super();
    }

}

定义实现类2:

/*定义一个实现类:m416类实现于接口GUN*/
public class M416 implements GUN {
   
    @Override
    public void self_introdution() {
   
        System.out.println("我是"+NAME1+"m416,我有"+BULLET+"发"+BULLET_TYPE1+"子弹");
    }
    public M416() {
   
        super();
    }
}

定义测试类:

/*测试类*/
public class GUNTest {
   
    public static void main(String[] args) {
   
        //多态创建实例,测试AK实现类和m416实现类。
        GUN gun = new AK();
        gun.self_introdution();
        GUN.result();
        GUN gun1 = new M416();
        gun1.self_introdution();
        GUN.result();
    }
}

测试结果展示:

end-------------------------------------------------------------------------------------------------------