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

devtools/2024/9/23 0:54:00/

文章目录

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


前言

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


接口interface

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

接口内部结构的说明

可以声明:

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

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

对于jdk8之前的场景:

java">// 定义接口
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{}

java">// 定义接口
interface Animal {void eat();   // 抽象方法void sleep(); // 抽象方法
}// 实现接口的类
class Dog implements Animal {@Overridepublic void eat() {System.out.println("Dog is eating");}@Overridepublic void sleep() {System.out.println("Dog is sleeping");}
}

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

接口之间的关系

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

java">// 定义接口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 {@Overridepublic void methodA() {System.out.println("Implementing methodA from interface A");}@Overridepublic void methodB() {System.out.println("Implementing methodB from interface B");}@Overridepublic void methodC() {System.out.println("Implementing methodC from interface C");}
}

接口的多态性

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

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



http://www.ppmy.cn/devtools/115718.html

相关文章

实时加密机的工作原理

实时加密机,作为数据加密领域的一种高级硬件设备,主要承担着对敏感数据进行实时加密和解密的任务,以确保数据在传输和存储过程中的安全性和完整性。以下是对实时加密机的详细阐述: 一、定义与功能 实时加密机是一种采用先进加密算…

【Azure Redis 缓存】Azure Redis出现了超时问题后,记录一步一步的排查出异常的客户端连接和所执行命令的步骤

问题描述 Azure Redis在使用的过程中,多次无规律的出现超时问题。抓取到客户端的异常错误后,想进一步的分析是何原因导致了如下异常呢? Timeout awaiting response (outbound0KiB, inbound0KiB, 5984ms elapsed, timeout is 5000ms), command…

mysql性能优化- 数据库配置优化

MySQL 性能优化 - 数据库配置优化 MySQL 是一个广泛使用的关系型数据库管理系统,但随着数据量的增长和访问频率的提高,其性能可能会成为瓶颈。为了保持高效的性能,除了应用层的查询优化和索引优化之外,数据库配置优化 也是非常重…

Go-知识-定时器

Go-知识-定时器 1. 介绍2. Timer使用场景2.1 设定超时时间2.2 延迟执行某个方法 3. Timer 对外接口3.1 创建定时器3.2 停止定时器3.3 重置定时器3.4 After3.5 AfterFunc 4. Timer 的实现原理4.1 Timer数据结构4.1.1 Timer4.1.2 runtimeTimer 4.2 Timer 实现原理4.2.1 创建Timer…

标准C++(二)

一、名字空间 什么是名字空间 在C语言中定义的全局变量、函数、结构、联合、枚举、枚举值、宏都在全局作用域下,所以当项目比较庞大时,非常容易造成命名冲突(以模块名作前缀、后缀),所以C中选择把全局作用域进行拆分…

【爱给网-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 1. 暴力破解密码,造成用户信息泄露 2. 短信盗刷的安全问题,影响业务及导致用户投诉 3. 带来经济损失,尤其是后付费客户,风险巨大,造…

C语言实现冒泡排序

引入 我想大部分编程小白学的第一种排序算法都是冒泡排序吧&#xff0c;你还没弄懂&#xff1f;快来看看&#xff01;&#xff01; 源码 void input(int* p, int sz) {for (int i 0; i < sz - 1; i){scanf("%d ", p i);} }void bubble_sort(int* p, int sz) …

【计算机网络】运输层协议解析

前言 运输层直接为应用进程间的逻辑通信提供服务。运输层向高层用户屏蔽了下面网络核心细节&#xff08;如网络拓扑、路由选择协议等&#xff09;它使应用进程看见的就好像是在两个运输层实体之间有一条端到端的逻辑通信信道。 UDP与TCP对比 UDP&#xff1a; 无连接 支持一对…