【基础篇】java-接口及其示例
接口
接口是对方法的封装,它不是类,但也会编译为.class文件。接口的关键字是interface,定义方式与类相似,是一种引用数据类型。接口不能创建对象,但可以被类使用(implements,类似于继承),一个实现接口的类中,要实现接口所有的抽象方法,否则就是一个抽象类了。
public interface 接口名称 {
// 抽象方法
// 默认方法
// 静态方法
// 私有方法
}
- 抽象方法
public interface InterFaceName {
public abstract void method();
}
使用abstract修饰的抽象方法,供子类实现使用。
- 默认方法
使用 default 修饰,不可省略,供子类调用或者子类重写。
public interface InterFaceName {
public default void method() {
// 执行语句
}
}
- 静态方法
使用 static 修饰,供接口直接调用,接口名.方法名()的方式直接调用,不能被子类实现。
public interface InterFaceName {
public static void method2() {
// 执行语句
}
}
- 私有方法
使用 private 修饰,供接口中的默认方法或者静态方法调用。
public interface InterFaceName {
private void method() {
// 执行语句
}
}
- 类与接口的关系
类与接口的关系为实现关系,即类实现接口,用implements关键字。非抽象子类实现接口,必须重写接口的所有抽象方法,而默认方法可以直接调用,也可以重写。
class 类名 implements 接口名 {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【可选】
}
- 私有方法的使用
私有方法:只有默认方法可以调用。
私有静态方法:默认方法和静态方法可以调用。
- 接口的多实现
接口与继承不同,是可以多实现的。就是一个类可以实现多个接口。
class 类名 [extends 父类名] implements 接口名1,接口名2,接口名3... {
// 重写接口中抽象方法【必须】
// 重写接口中默认方法【不重名时可选】
}
当实现多个接口时,对于抽象方法,必须全部重写,如果抽象方法重名,只需重写一次即可。这是因为重写是对方法的覆盖,以最新的为准。
对于默认方法,实现类都可以使用,如果有重名,必须重写一次,因为不重写会混乱。
注意,默认方法有个优先级问题,如果默认方法与实现类的父类成员方法重名,会以父类的成员方法为较高优先级。
对于静态方法,类不能实现静态方法,所以即使重名也不受影响。
- 接口也可以继承
接口是可以实现继承的,也是用extends关键字,不过接口可以实现多继承,当然,接口只能继承接口,类型要保持一致。
- 接口注意事项
-接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用 public static final修饰。
-接口中,没有构造方法,不能创建对象。
-接口中,没有静态代码块。
接口实现案例
- 案例需求
笔记本电脑( laptop)通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,
但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。
定义USB接口,具备最基本的开启功能和关闭功能。鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守
USB规范,实现USB接口,否则鼠标和键盘的生产出来也无法使用。
- 案例分析
-USB接口,包含开启和关闭功能;
-笔记本类,包含运行、关机功能,使用usb设备功能;
-鼠标类,实现usb接口,具备点击方法
-键盘类,实现USB接口,具备敲击方法
- 案例实现
-定义USB接口
interface USB{
void open();
void close();
}
-定义鼠标类
class Mouse implements USB{
public void open(){
System.out.println("鼠标开启");
public void close(){
System.out.println("鼠标关闭");
public void click(){
System.out.println("鼠标单机");
}
-定义键盘类
class KeyBoard implements USB{
public void open(){
System.out.println("键盘开启");
public void close(){
System.out.println("键盘关闭");
public void type(){
System.out.println("键盘敲击");
}
-定义笔记本类
class Laptop{
public void run(){
System.out.println("笔记本运行");
public void useUSB(USB usb){
if(usb != null){
usb.open();
if(usb instanceof Mouse){
Mouse m = (Mouse) usb;
m.click();
}else if (usb instanceof KeyBoard){
KeyBoard kb = (KeyBoard)usb;
kb.type();
usb.close();
public void shutDown(){
System.out.println("笔记本关闭");
}
-编写测试类
public class Test{
public static void main(String[] args){
Labtop lt = new Laptop();
lt.run();
USB u1 = new Mouse();