必须要掌握接口的定义格式和接口中抽象方法的定义和使用格式【最重要】
接口作用: 实现对类的功能的扩展,解决java中类的单继承的局限性
接口在设计之初 所以设计之初接口中只能定义抽象方法和常量
1.抽象方法: public abstract 返回值类型 方法名称(形式参数列表...);
2.默认方法【jdk8开始】: public default 返回值类型 方法名称(形式参数列表...) {...}
3.静态方法【jdk8开始】: public static 返回值类型 方法名称(形式参数列表...) {...}
4.常量: public staitc final 数据类型 变量名称 = 数据值;
public interface 类名 {
}
接口中抽象方法的定义格式和使用【重点】
定义public abstract 返回值类型 方法名称(形式参数列表...);
接口中抽象方法,有默认修饰符public abstract,不写也有
抽象类中抽象方法必须写public abstract,不能省略
接口中抽象方法的使用
(1)不能直接创建接口的对象
(2)定义实现类 实现 接口 关键字 implements
格式:
public class 类名 implements 接口A,接口B {
}
(3)实现类中覆盖重写接口中的所有的抽象方法
去掉abstract关键字,添加{} 快捷键: ctrl + i
(4)创建实现类对象
(5)使用实现类对象调用方法
public interface USB {
public abstract void open();
void close();
}
public class UDisk implements USB {
@Override
public void open() {
System.out.println("U盘已经开启....");
}
@Override
public void close() {
System.out.println("U盘已经关闭....");
}
}
不能直接创建接口的对象
UDisk uDisk = new UDisk();
接口默认方法的定义格式:
public default 返回值类型 方法名称(形式参数列表...){
}
默认方法的使用: 只能使用实现类对象@Override调用默认方法
注意:
1.接口中的默认方法,不强制要求实现类进行覆盖重写
2.但是实现类可以根据需求,选择性的覆盖重写接口中的默认方法
3.如果实现类覆盖重写接口中的默认方法,必须去掉default关键字
public interface USB {
public default void driver() {
System.out.println("USB接口提供的默认驱动程序....");
}
}
public class HMScanner implements USB {
@Override
public void driver() {
System.out.println("使用扫描仪专用驱动");
}
}
接口中的静态方法的定义和使用【了解】
public static 返回值类型 方法名称(形式参数列表...) {
方法体;
}
使用格式: 只能使用接口名称调用接口中的静态方法
(1)接口中的静态方法,属于接口本身,与实现类无关,在实现类中不存在覆盖重写
(2)类中的静态方法,属于类本身,与接口无关,与对象无关
(3)类中的静态方法:
名直接调用 ---推荐使用
对象直接调用 ---不推荐使用
总结: 静态的内容要么用接口名称调用,要么用类名称调用
public interface USB {
public abstract void open();
void close();
public default void driver() {
System.out.println("USB接口提供的默认驱动程序....");
}
public static void thanks() {
System.out.println("感谢使用USB接口....");
}
}
public class HMScanner implements USB {
public static void thanks() {
System.out.println("感谢使用扫描仪....");
}
}
接口中成员变量的使用【了解】
接口中不能定义变量,只能定义常量(值不可以改变),而且常量有默认修饰符public static final
接口中的常量的使用: 接口名称.常量名称
建议: 接口中常量的命名全部使用大写字母,单词之间用_分隔MAX_SPEED_OF_TRANSFER
public interface USB {
public static final double VERSION = 3.0;
public static final int MAX_SPEED_OF_TRANSFER = 500;
public static void show() {
System.out.println("USB接口版本: " + USB.VERSION + ", 最大传输速度: " + USB.MAX_SPEED_OF_TRANSFER + "MB/s");
}
}
测试类USB.VERSION
接口的多实现【重点】
一个类能继承一个父类,同时实现多个接口:
public abstract class AbstractClass {
public abstract void method();
}
public interface MyInterA {
void show();
}
public interface MyInterB {
void fun();
}
多个继承写法--public class 子类名 extends 父类名 implements 接口名A,接口名B {
覆盖重写抽象父类和接口中的所有的抽象方法
}
注意子类必须重写父类和接口中的所有抽象方法,只要有一个抽象方法没有被重写, 该子类必须定义为抽象类,看MyClass02类
接口的多继承关系 子接口会拥有父接口中的所有抽象方法
public class MyClass extends AbstractClass implements MyInterA, MyInterB {
@Override
public void method() {
System.out.println("MyClass...method...");
}
@Override
public void show() {
System.out.println("MyClass...show...");
}
@Override
public void fun() {
System.out.println("MyClass...fun...");
}
}