添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

【基础篇】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();