接口的概念:
在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-------------------------------------------------------------------------------------------------------