当前位置: 首页 > article >正文

【Java】接口interface【主线学习笔记】

文章目录

  • 前言
  • 接口interface
    • 接口内部结构的说明
    • 实现
    • 接口之间的关系
    • 接口的多态性


前言

Java是一门功能强大且广泛应用的编程语言,具有跨平台性和高效的执行速度,广受开发者喜爱。在接下来的学习过程中,我将记录学习过程中的基础语法、框架和实践技巧等,分享学习心得,对自己学习过程进行整理和总结,也希望能为其他学习Java的朋友提供一些帮助和参考。


接口interface

在Java中,接口(interface)是一个用于定义一组抽象方法的引用类型。接口只包含方法的声明,不提供方法的实现。类通过实现(implements)接口来承诺提供接口中定义的所有方法的具体实现。接口是一种规范,它定义了类必须遵循的规则。

接口内部结构的说明

可以声明:

  • 属性:必须使用public static final修饰
  • 方法:jdk8之前声明抽象方法,修饰为public abstract; jdk8可以包含默认方法和静态方法;jdk9可以声明私有方法。

不能声明:构造器、代码块等。

对于jdk8之前的场景:

// 定义接口
interface Vehicle {
   
   // 属性:必须为 public static final(JDK 8 之前)
   public static final int MAX_SPEED = 120;  // 车辆的最大速度常量
   //可以省略public static final ,此处MAX_SPEED依然表示public static final 
   int MAX_SPEED = 7890;

   // 抽象方法:隐式为 public abstract(JDK 8 之前)
   void start();   // 启动车辆
   void stop();    // 停止车辆
   void accelerate(int increment); // 增加车辆速度
}

对于jdk8的场景,接口中声明的静态方法只能被接口来调用,不能使用其实现类进行调用。
接口中声明的默认方法可以被实现类继承,实现类在没有重写此方法的情况下,默认调用接口中的默认方法。如果实现类重写了此方法,则调用的是自己重写的方法。
接口冲突:类实现了两个接口,但是两个接口中定义了同名参数的默认方法,那么实现类在没有重写此两个接口默认方法的情况下,会报错,此时实现类必须要重写接口中定义的同名同参数的方法。
类优先原则:子类继承了父类并实现了接口,父类和接口中声明了同名同参数的方法(其中接口中的方法是默认方法)。默认情况下,子类在没有重写此方法的情况下,调用的是父类的方法。

实现

接口与类的关系:实现关系
格式:class A implements B,C{}

// 定义接口
interface Animal {
    void eat();   // 抽象方法
    void sleep(); // 抽象方法
}

// 实现接口的类
class Dog implements Animal {
    @Override
    public void eat() {
        System.out.println("Dog is eating");
    }

    @Override
    public void sleep() {
        System.out.println("Dog is sleeping");
    }
}

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

接口之间的关系

接口与接口之间是继承关系,且可以多继承。

// 定义接口A
interface A {
    // 抽象方法
    void methodA();
}

// 定义接口B
interface B {
    // 抽象方法
    void methodB();
}

// 定义接口C,继承接口A和B,实现多继承
interface C extends A, B {
    // 抽象方法
    void methodC();
}

// 实现接口C的类
class ImplementingClass implements C {

    @Override
    public void methodA() {
        System.out.println("Implementing methodA from interface A");
    }

    @Override
    public void methodB() {
        System.out.println("Implementing methodB from interface B");
    }

    @Override
    public void methodC() {
        System.out.println("Implementing methodC from interface C");
    }
}

接口的多态性

格式:接口名 变量名 = new 实现对象类

虽然定义的变量是接口类型的,但它指向的是具体实现类的对象。通过接口引用调用方法时,实际上调用的是具体实现类重写的实现方法。这就是接口的多态性,运行时根据实际的对象类型决定调用哪个实现类的方法。



http://www.kler.cn/a/315235.html

相关文章:

  • 知乎 PB 级别 TiDB 数据库集群管控实践
  • MySQL数据库——复制表数据与结构
  • AOP 面向切面编程的实现原理
  • 【数据结构练习题】链表与LinkedList
  • 设计模式之【观察者模式】
  • 未来将要被淘汰的编程语言
  • Mac使用gradle编译springboot-2.7.x源码
  • Hadoop分布式集群配置
  • SIP Servlets学习
  • ModbusTCP报文详解
  • 冒泡排序,选择排序,插入排序,归并排序,快速排序五种排序方法
  • thop计算模型复杂度(params,flops)
  • 云计算实训50——Kubernetes基础命令、常用指令
  • 怎样把PPT上顽固的图标删了
  • Html css水平居中+垂直居中+水平垂直居中的方法总结
  • WPF 自定义路由事件
  • HTTP的基本格式
  • 整合多方大佬博客以及视频 一文读懂 servlet
  • go/函数
  • Java笔试面试题AI答之单元测试JUnit(5)
  • 3. 什么是连接池?为什么使用数据库连接池?
  • AgentScope中带有@功能的多Agent组对话
  • Github Wiki 超链接 转 码云Gitee Wiki 超链接
  • hcia-openEuler V1.0师资题库-试卷2
  • MySQL数据库专栏(九)内联查询
  • 如何做系统架构?从动态系统思考的角度