Java接口

153 阅读2分钟
  1. java只支持单继承 接口是为了弥补这个单继承.接口是一个非常特殊的抽象类

  2. 接口的理解:接口的本质是契约、标准、规范,就像我们的法律一样。制定好后大家都要遵守。

  3. 定义接口的关键字:interface

  4. 接口内部结构的说明:

  • 可以声明:
    • 属性:必须使用public static final修饰
    • 方法:
      jdk8之前:声明抽象方法,修饰为public abstract
      jdk8:声明静态方法、默认方法
      jdk9:声明私有方法
  • 不可以声明:
    • 构造器、代码块等
  1. 接口与类的关系:实现关系

  2. 格式:

class A extend SuperA implements B,C{}
A相较于SuperA来讲,叫做子类
A相较于B、C来讲,叫做实现类

  1. 满足此关系之后,说明:

类可以实现多个接口。
类针对于接口的多实现,一定程度上就弥补了类的单继承的局限性。
类必须将实现的接口中的所有的抽象方法都重写(或实现),方可实例化。否则,此实现类必须声明为抽象类。

  1. 接口与接口的关系:继承关系,且可以多继承

  2. 接口的多态性: 接口名 变量名 = new 实现类对象;

public class USBTest {
    public static void main(String[] args) {
    //! 接口实现类对象的四种方法
        // 1.创建接口实现类的对象
        computer c = new computer();
        print p = new print();
        c.Use(p);

        // 2. 创建接口实现类的匿名对象
        System.out.println();
        c.Use(new camera());

        // 3. 创建接口匿名实现类的对象
        System.out.println();
        USB usb1 = new USB() {
            @Override
            public void ing() {
                System.out.println("正在使用U盘");
            }

            @Override
            public void stop() {
                System.out.println("U盘使用完毕");
            }
        };
        c.Use(usb1);

        // 4. 创建接口匿名实现类的匿名对象
        System.out.println();
        c.Use(new USB() {
            @Override
            public void ing() {
                System.out.println("正在使用扫描仪");
            }

            @Override
            public void stop() {
                System.out.println("扫描仪使用完毕");
            }
        });

    }
}

class computer{
    void Use(USB usb){
        System.out.println("设备准备就绪");
        usb.ing();
        System.out.println("设备传输完毕");
        usb.stop();
    }
}

// 接口
interface USB{
    public abstract void ing();
    void stop();
}

// 类调用接口
class print implements USB{

    @Override
    public void ing() {
        System.out.println("正在使用打印机");
    }

    @Override
    public void stop() {
        System.out.println("打印机使用完毕");
    }
}

// 类调用接口
class camera implements USB{

    @Override
    public void ing() {
        System.out.println("正在使用相机");
    }

    @Override
    public void stop() {
        System.out.println("相机使用完毕");
    }
}