一、接口的定义以及使用
1、接口:是一个引用数据类型,是一种标准和规范
2、关键字
a、interface 接口
public interface 接口名{}
b、implements 实现
实现类 implements 接口名{}
3、使用流程
(1)定义接口
public interface 接口名{}
(2)实现
public class 实现类名 implements 接口名{}
(3)使用
a、实现类实现接口
b、重写接口中的抽象方法
c、创建实现类对象(接口不能直接new对象)
d、调用重写的方法
二、接口中的成员
2.1、抽象方法
1、定义格式
public abstract 返回值类型 方法名(形参);
2、注意
不写 public abstract默认也有
3、使用:
a、定义实现类,实现接口
b、重写抽象方法
c、创建实现类对象,调用重写的方法
//接口 public interface USB { public abstract void open(); String close(); } //实现类 public class Mouse implements USB{ @Override public void open() { System.out.println("打开鼠标"); } @Override public String close() { return "关闭鼠标"; } } //测试类 public class Test { public static void main(String[] args) { Mouse mouse = new Mouse(); mouse.open(); String result = mouse.close(); System.out.println(result); } }2.2、默认方法
1、格式
public default 返回值类型 方法名(形参){
方法体
return 结果
}
2、使用
a、定义实现类,实现接口
b、默认方法可以重写,也可以不重写
c、创建实现类对象,调用默认方法
2.3、静态方法
1、 定义格式
public static 返回值类型 方法名(参数){
方法体
return 结果
}
2、使用:接口名直接调用
2.4、成员变量
1、格式
public static final 数据类型 变量名 = 值
2、相关知识点:final
final代表最终的,被它修饰的变量,不能二次赋值,可以视为常量
3、特点:不写public static final 默认也有
4、使用:接口名直接调用
5、注意
a、被static final修饰的成员变量需要手动赋值
b、习惯上将被tatic final修饰的成员变量名大写
//接口的定义 public interface USB { static final int NUM1 = 100; int NUM2 = 200; // int NUM3; 需要初始化值 public default void methodDef() { System.out.println("我是默认方法"); } public static void methodSta() { System.out.println("我是静态方法"); } } //实现类的定义 public class Mouse implements USB{ @Override public void methodDef(){ System.out.println("我是重写默认方法"); } } //测试类的定义 public class Test { public static void main(String[] args) { Mouse mouse = new Mouse(); mouse.methodDef(); USB.methodSta(); System.out.println(USB.NUM1); } }三、接口的特点
1、接口可以多继承 ->一个接口可以继承多个接口
public interface InterfaceA extends InterfaceB,InterfaceC{};
2、接口可以多实现 -> 一个实现类可以实现一个或多个接口
public class InterfaceImpl implements InterfaceA,interfaceB{}
3、一个子类可以继承一个父类的同时,实现一个或多个接口
public class Zi extends Fu implements InterfaceA,InterfaceB{}
4、注意:
a、继承也好,实现接口也罢,只要是父类中或者接口的抽象方法,子类或实现类都要重写。
b、当一个类实现多个接口时,如果接口中的抽象方法有重名并且参数一致,只需要重写一次。
c、当一个类实现多个接口时,如果多个接口中默认方法有重名的,且参数列表一样,必须重写一次默认方法
public interface A { public void method(); //抽象方法没有方法体 } public interface B { public void method(); } public class Impl implements A,B { //只需重写一次即可 @Override public void method() { System.out.println("我是重写之后的方法"); } }四、接口和抽象类的区别
1、相同点:
a、都位于继承体系的顶端,用于被其它类实现或继承
b、都不能new
c、都包含抽象方法,其子类或者实现类都必须重写这些抽象方法
2、不同点:
a、抽象类:一般作为父类使用,可以有成员变量、构造方法、成员方法、抽象方法等。
b、接口:成员单一。一般抽取接口,抽取的都是方法,视为功能的大集合
c、类不能多继承,但是接口可以