一、概念
1.1接口是一种引用数据类型,是一种特殊的抽象类,但接口只有常量和方法的定义,而没有变量和方法的实现。
1.2与继承类似原理类似,但可以实现多重继承的效果。
二、定义接口
2.1关键字:interface(与class同级)。
2.2语法:
public interface 接口名{
//内容
}
2.3接口中可以包含的内容:
(1)常量:
public static final 数据类型 常量名 = 数据值;
ps:一旦使用final来修饰,说明值不能改变;并且接口中的常量必须进行赋值,并且命名为全大写和_
(2)方法:
1)抽象方法:
public abstract 返回值类型 方法名称(参数列表);
ps:接口中的抽象方法必须是public abstract这俩固定的关键字(这俩关键字可以选择性的省略)
2)默认方法: (Java8后才有的)
public default 返回值类型 方法名(参数列表){
//方法体
}
ps:接口中的默认方法可以解决接口升级的问题。
3)静态方法: (Java8后才有的)
public static 返回值类型 方法名(参数列表){
//方法体
}
范例
package interface_demo;
public interface MyInterFacePerson {
//常量
static final int PER_AGE = 21;
//抽象方法
public abstract void methodAbstract();
//默认方法
public default void methodDefault_01(){
System.out.println("这是接口的默认方法-01");
}
public default void methodDefault_02(){
System.out.println("这是接口的默认方法-02");
}
//静态方法
public static void methodStatic(){
System.out.println("这是接口的静态方法");
}
}
三、使用接口
3.1说明
(1). 接口不能直接使用,必须要一个"实现类"来"实现"(调用)该接口;
“实现类”语法:
关键字:implement,其用法extends类似 (表示继承)
public class 实现类名称 implement 接口名称{
//重写的方法(抽象方法 或 默认方法)
}
(2). 接口的实现类,必须覆盖重写(实现)接口中所有的抽象方法,默认方法可以重写也可以直接使用,静态方法只能直接使用;
(3).创建实现类的对象,从而进行使用。
ps:如果实现类没有重写覆盖接口中的所有抽象方法,那么实现类自己就必须是抽象类
3.2范例:
1)实现类(重写方法):
package interface_demo;
public class MyInterFacePersonLmpt implements MyInterFacePerson {
//重写抽象方法
public void methodAbstract(){
System.out.println("这是重写的抽象方法");
}
//重写默认方法-02
public void methodDefault_02(){
System.out.println("这是重写的默认方法-02");
}
}
2)创建实现类的对象,使用接口
package interface_demo;
public class InterFaceDemo {
public static void main(String[] args) {
MyInterFacePersonLmpt implement = new MyInterFacePersonLmpt();
//常量
int age = MyInterFacePerson.PER_AGE;
//抽象方法
implement.methodAbstract();
//默认方法
//未重写直接调用,因为实现类可以直接继承接口的默认方法
implement.methodDefault_01();
//重写的默认方法
implement.methodDefault_02();
//静态方法
MyInterFacePerson.methodStatic();
}
}
结果:
这是重写的抽象方法
这是接口的默认方法-01
这是重写的默认方法-02
这是接口的静态方法
3.3特殊的使用
(1)接口的继承:一个接口可以继承其他接口,继承的基本概念与类一样,但与类不同的是,接口可以有多个父接口。范例:
public interface Grandpa1{
void method1();
}
public interface Grandpa2{
void method2();
}
public interface InterFaceFather extends Grandpa1,Grandpa2{
}
ps:InterFaceFather有Grandpa1和Grandpa2两个父类,接口的继承同样使用extends关键字,多个父接口之间以逗号分隔。
(2)类的继承与接口:类的继承与接口类的继承与接口可以共存
换句话说,类可以在继承基类的情况下,同时实现一个或多个接口。范例:
public class Child extends ClassFather implements InterFaceFather(){
//主体代码
}
ps:关键字extends要放在implements之前。(用于演示,ClassFather为定义)
instanceof:与类一样,接口也可以使用instanceof关键字,用来判断一个对象是否实现了某接口。范例:
Point p = new Point(2,3);
if (p instanceof MyComparable){
System.out.println("comparable");
}