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

【前端学java】Java中的接口和枚举概念(7)


theme: smartblue

往期回顾:

  • 【前端学java】JAVA开发的依赖安装与环境配置 (0)
  • 【前端学 java】java的基础语法(1)
  • 【前端学java】JAVA中的packge与import(2)
  • 【前端学java】面向对象编程基础-类的使用 (3)
  • 【前端学java】类中的访问权限详解,通俗易懂(4)
  • 【前端学java】java中final修饰符(5)
  • 【前端学java】全网最通俗易懂的JAVA抽象概念(6)

如果你是一名前端开发者,并且熟悉TS的话,接口(Interface)概念你一定非常熟悉,枚举肯定也是信手拈来。

interface People {age:number,name:string
}let peple:People = {age:18name:"shixiaoshi"
}

上述代码就是前端接口使用的一个简单演示,Java中,接口和枚举的概念几乎是一致的。现在,我们来学习一下java中的接口概念。

Java中的接口

基础概念

在Java中,接口(Interface) 是一种抽象类型,它定义了一组抽象方法常量字段,简单来说,就是提前定义了类的结构用来约束类的创建。

如果你明白TypeScript,那么接口的概念理解起来,也轻而易举。

一个简单的Demo如下

// 接口的定义
interface Car {// 声明抽象方法void run();
}

定义接口

  • 使用interface关键字来定义接口,接口的命名通常以大写字母开头,符合驼峰命名规则。
  • 接口中可以包含抽象方法和常量字段,但不能包含具体实现的方法和实例变量(即成员变量)。
  • 方法在接口中默认为public abstract,字段默认为public static final,可以省略这些修饰符。
// 接口的定义
interface Car {// 声明抽象方法void run();// 接口中的常量,默认为 public static finalint money = 12345;
}

实现接口

  • 使用implements关键字来让类实现一个或多个接口。一个类可以同时实现多个接口,用逗号分隔。
  • 实现接口时,类必须提供接口中定义的所有抽象方法的具体实现,否则该类必须被声明为抽象类。
  • 实现接口的类可以拥有自己的其他成员变量和方法,但它必须实现接口中定义的所有方法

示例代码:

// 接口的定义
interface Car {// 声明抽象方法void run();// 接口中的常量,默认为 public static finalint money = 12345;
}// 实现接口
class Benchi implements Car {public void run() {System.out.println("run.....");}
}

接口的继承

在Java中,接口也可以像类一样进行继承,即一个接口可以继承自另一个或多个接口。接口继承使用关键字extends

// 接口的定义
interface Car {// 声明抽象方法void run();// 接口中的常量,默认为 public static finalint money = 12345;
}// 实现接口
class Benchi extends Car {// 子接口新增的抽象方法
}

在接口继承中,子接口将包含父接口的所有抽象方法和常量字段,并且子接口可以添加自己的抽象方法,但不能添加具体实现的方法。

接口中的默认方法

在Java 8中引入了默认方法(default method),可以在接口中提供具体的方法实现。

  • 默认方法使用default关键字来定义,允许接口在不破坏现有实现的情况下添加新的方法。
  • 实现类不强制重写默认方法,但仍可以选择重写以覆盖默认实现。
// 定义一个接口
interface MyInterface {int count = 100; // 常量字段,默认为 public static finalvoid abstractMethod(); // 抽象方法,默认为 public abstractdefault void defaultMethod() {// 默认方法,提供默认实现System.out.println("默认方法.....");}
}// 类实现接口
class MyClass implements MyInterface {public void abstractMethod() {System.out.println("Abstract method implementation.");}
}public class Main {public static void main(String[] args) {MyClass obj = new MyClass();obj.abstractMethod(); // 调用抽象方法的实现obj.defaultMethod();  // 调用默认方法的实现System.out.println(MyInterface.count); // 访问接口中的常量}
}

接口中的静态方法

  • 在Java 8中引入了静态方法,使用static关键字来定义。
  • 静态方法只能在接口中定义,不能在实现类中被重写。
// 定义一个接口
interface MyInterface {// 静态方法,不可重写static void staticMethod() {System.out.println("这是静态方法");}
}public class Main {public static void main(String[] args) {MyInterface.staticMethod(); // 调用接口中的静态方法}
}

java中的枚举

什么是枚举

在Java中,枚举(Enum) 是一种特殊的数据类型,用于定义一组常量,这些常量在代码中是固定且有限的。

Java中的枚举通过关键字enum进行声明,我们看一个示例:

// 定义一个枚举
enum DayOfWeek {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
}public class Main {public static void main(String[] args) {// 使用枚举类型的常量DayOfWeek today = DayOfWeek.MONDAY;// 使用switch语句处理枚举switch (today) {case MONDAY:System.out.println("Today is Monday.");break;case TUESDAY:System.out.println("Today is Tuesday.");break;// 其他的case...default:System.out.println("Today is some other day.");}}
}

这个和ts中的枚举概念用法其实是一致的。

枚举的valueOf和values方法(了解)

Java编译器会为每个枚举类型生成valueOfvalues方法。valueOf方法用于将枚举常量的名称转换为对应的枚举实例,values方法返回包含所有枚举常量的数组。

示例代码:

enum Color {RED,GREEN,BLUE
}public class Main {public static void main(String[] args) {// 使用valueOf将字符串转换为枚举实例Color color = Color.valueOf("RED");System.out.println("Color: " + color);// 使用values获取所有枚举实例Color[] colors = Color.values();for (Color c : colors) {System.out.println(c);}}
}

枚举的构造函数和字段(了解)

枚举可以像普通类一样拥有构造函数,并且每个枚举常量都可以有自己的字段和方法。每个枚举常量在定义时都必须调用构造函数,并为字段赋值。

示例代码:

javaCopy code
enum Size {SMALL("S", 10),MEDIUM("M", 20),LARGE("L", 30);private final String abbreviation;private final int value;Size(String abbreviation, int value) {this.abbreviation = abbreviation;this.value = value;}public String getAbbreviation() {return abbreviation;}public int getValue() {return value;}
}public class Main {public static void main(String[] args) {Size size = Size.MEDIUM;System.out.println("Size: " + size);System.out.println("Abbreviation: " + size.getAbbreviation());System.out.println("Value: " + size.getValue());}
}

枚举的构造函数只能是private访问权限,这样可以保证枚举常量只能在枚举内部进行实例化。

相关文章:

【前端学java】Java中的接口和枚举概念(7)

theme: smartblue 往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学 java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类…...

P8611 [蓝桥杯 2014 省 AB] 蚂蚁感冒(模拟)

首先&#xff0c;我们自然而然的想到和 P1007独木桥 的机制是一样的&#xff0c; 我们只需要把蚂蚁的相遇并掉头视作互相穿过即可 标记向左&#xff0c;向右蚂蚁的数量 for (int i 0; i < num - 1; i){int temp 0;scanf("%d", &temp);// 向右移动if (tem…...

边缘计算是如何为元宇宙提供动力的?

构建元宇宙虚拟世界并不简单&#xff0c;也并不便宜&#xff0c;但是还是有许多大型公司正在转移大量资源来开发他们的元宇宙业务&#xff0c;当然大部分企业注意力都围绕着 VR 耳机、AR 眼镜、触觉手套和其他沉浸式虚拟现实体验所需的可穿戴硬件。虽然这种沉浸式的体验是最终结…...

优秀智慧园区案例 - 上海世博文化公园智慧园区,先进智慧园区建设方案经验

一、项目背景 世博文化公园是上海的绿色新地标&#xff0c;是生态自然永续、文化融合创新、市民欢聚共享的大公园。作为世博地区的城市更新项目&#xff0c;世博文化公园的建设关乎上海城市风貌、上海文化展示、城市生态环境、市民游客体验、上海服务品牌等&#xff0c;被赋予…...

【DevOps】Git 图文详解(五):远程仓库

Git 图文详解&#xff08;五&#xff09;&#xff1a;远程仓库 1.远程用户登录1.1 &#x1f511; 远程用户登录&#xff1a;HTTS1.2 &#x1f511; 远程用户登录&#xff1a;SSH 2.远程仓库指令 &#x1f525;3.推送 push / 拉取 pull4.fetch 与 pull 有什么不同 &#xff1f; …...

如果在手机没有root的情况下完成安卓手机数据恢复

您是否不小心从安卓设备中删除了重要数据&#xff1f; 担心如何取回您的照片、视频和文档&#xff1f; 有时您可能会不小心删除重要数据并使用安卓 root方法取回文件。 许多用户不喜欢根植他们的安卓设备&#xff0c;因为这是一种复杂的方法。 在本指南中&#xff0c;我们将向您…...

C++学习 --stack

目录 1&#xff0c; 什么是stack 2&#xff0c; 创建stack 2-1&#xff0c; 标准数据类型 2-2&#xff0c; 自定义数据类型 2-3&#xff0c; 其他创建方式 3&#xff0c; 操作stack 3-1&#xff0c; 赋值 3-2&#xff0c; 插入元素(push) 3-3&#xff0c; 查询元素 3…...

简单但好用:4种Selenium截图方法了解一下!

前言 我们执行UI自动化操作时&#xff0c;大多数时间都是不在现场的&#xff0c;出现错误时&#xff0c;没有办法第一时间查看到&#xff0c;这时我们可以通过截图当时出错的场景保存下来&#xff0c;后面进行查看报错的原因&#xff0c;Selenium中提供了几种截图的方法&#x…...

【报错记录】解决使用Kotlin写的SpringBoot项目使用Aspect切面无法生效的问题

前言 为了能在SpringBoot使用Kotlin&#xff0c;真的是各种坑都彩礼一遍&#xff0c;这次遇到的问题是Aspect无法对Kotlin代码生效。我这里的使用场景是使用切面切Controller中的方法&#xff0c;用来对接口进行一些初始化和收尾工作。 Aspect在Controller类还是Java代码的时…...

在python中分别利用numpy,tensorflow,pytorch实现数据的增加维度(升维),减少维度(降维)

文章目录 前言一、使用numpy实现升维度&#xff0c;降维度二、使用TensorFlow实现升维度&#xff0c;降维度三、使用PyTorch实现升维度&#xff0c;降维度总结 前言 我们明确一下升维和降维的概念&#xff1a; 升维&#xff08;Dimensionality Augmentation&#xff09;&…...

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码

基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于天鹰算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于天鹰优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神经网络的光滑…...

Flutter的Event Loop

Flutter 的事件循环机制是其框架的核心部分&#xff0c;它负责管理事件的处理和UI的渲染。了解这个机制对于开发高效且响应迅速的Flutter应用非常重要。以下是Flutter事件循环的主要组成部分和工作原理&#xff1a; 1. 主事件循环&#xff08;Main Event Loop&#xff09; 当…...

HarmonyOS ArkTSTabs组件的使用(六)

Tabs组件的使用 ArkUI开发框架提供了一种页签容器组件Tabs&#xff0c;开发者通过Tabs组件可以很容易的实现内容视图的切换。页签容器Tabs的形式多种多样&#xff0c;不同的页面设计页签不一样&#xff0c;可以把页签设置在底部、顶部或者侧边。 Tabs组件的简单使用 Tabs组件…...

【MetaLearning】有关Pytorch的元学习库higher的基本用法

【MetaLearning】有关Pytorch的元学习库higher的基本用法 文章目录 【MetaLearning】有关Pytorch的元学习库higher的基本用法1. 基本介绍2. Toy ExampleReference 1. 基本介绍 higher.innerloop_ctx是higher库的上下文管理器&#xff0c;用于创建内部循环&#xff08;inner lo…...

火山引擎 ByteHouse 的增强型数据导入技术实践

作为企业数字化建设的必备要素&#xff0c;易用的数据引擎能帮助企业提升数据使用效率&#xff0c;更好提升数据应用价值&#xff0c;夯实数字化建设基础。 数据导入是衡量OLAP引擎性能及易用性的重要标准之一&#xff0c;高效的数据导入能力能够加速数据实时处理和分析的效率。…...

依赖库:Ceres-solver-2.0.0安装

依赖库&#xff1a;Ceres-solver-2.0.0安装 前言安装ceres-solver-2.0.0验证 前言 Ceres Solver是谷歌开源的C非线性优化库&#xff0c;能够解决有约束或无约束条件下的非线性最小二乘问题。2010年之后大量的运用在谷歌的产品开发中&#xff0c;尤其在谷歌开源的cartographer中…...

LeSS敏捷框架高效生产力实践

每个团队可能都有一套适合自己的敏捷方法&#xff0c;本文介绍了ResponseTap工程团队通过采用LeSS框架、引入准备周&#xff0c;从而提升迭代冲刺研发效能的实践。原文: LeSS Agile, More Productive — Part 1: Pain[1], LeSS Agile, More Productive — Part 2: Promise, LeS…...

matlab绘图函数plot和fplot的区别

一、背景 有的函数用plot画就会报错&#xff0c;显示数据必须为可转换为双精度值的数值、日期时间、持续时间、分类或数组。 如下图所示&#xff1a; 但用fplot函数就没有问题&#xff0c;因此这里记录一下两者的区别&#xff0c;如果使用不当&#xff0c;画出的图可能就是下…...

场景交互与场景漫游-对象选取(8-2)

对象选取示例的代码如程序清单8-11所示&#xff1a; /******************************************* 对象选取示例 *************************************/ // 对象选取事件处理器 class PickHandler :public osgGA::GUIEventHandler { public:PickHandler() :_mx(0.0f), _my…...

模拟Spring源码思想,手写源码,理解注解

1、BeanDefinition package com.csdn.myspring; import lombok.AllArgsConstructor; import lombok.Data; Data AllArgsConstructor public class BeanDefinition {private String beanName;private Class beanClass; }2、扫描包的工具类MyTools package com.csdn.myspring; im…...

AI编程新范式:用cursor-rules实现工程化提示词驱动开发

1. 项目概述与核心价值如果你和我一样&#xff0c;长期在软件开发的一线摸爬滚打&#xff0c;那你肯定对“效率”和“质量”这两个词有着近乎偏执的追求。我们总是在寻找那个能让我们写代码更快、更准、更省心的“神器”。最近&#xff0c;我在一个名为cursor-rules的开源项目里…...

novel-downloader:终极小说下载指南,永久保存你的阅读时光

novel-downloader&#xff1a;终极小说下载指南&#xff0c;永久保存你的阅读时光 【免费下载链接】novel-downloader 一个可扩展的通用型小说下载器。 项目地址: https://gitcode.com/gh_mirrors/no/novel-downloader 你是否曾为心爱的小说突然消失而心痛&#xff1f;是…...

高速数据线缆SPICE模型验证与信号完整性分析

1. 高速数据线缆组件SPICE模型验证概述在高速数字系统设计中&#xff0c;0.8mm间距的线缆组件作为关键互连元件&#xff0c;其电气性能直接影响信号完整性。我们采用HSPICE工具对EQCD系列高速数据线缆进行建模验证&#xff0c;通过对比仿真与实测数据&#xff0c;评估模型在时域…...

从PBRUSH到扫雷:用otvdmw在Win10上搭建一个可运行的Windows 3.2怀旧博物馆

从PBRUSH到扫雷&#xff1a;用otvdmw在Win10上搭建一个可运行的Windows 3.2怀旧博物馆 在数字技术飞速迭代的今天&#xff0c;那些曾经定义了一个时代的软件界面正逐渐淡出人们的视野。Windows 3.2作为微软首个真正流行的图形操作系统&#xff0c;承载着无数早期PC用户的集体记…...

Transformer时间序列预测实战:用PyTorch从零搭建并预测股票价格(附完整代码)

Transformer金融时间序列预测实战&#xff1a;从数据清洗到策略部署的全流程解析 引言&#xff1a;当Transformer遇见金融数据 金融市场的数据预测一直是量化分析领域的圣杯。传统的统计方法和浅层机器学习模型在处理高频、非平稳的金融时间序列时往往捉襟见肘。2017年Transfor…...

从协议到像素:深入HDMI 2.1 VRR底层,看它如何“驯服”游戏卡顿与撕裂

从协议到像素&#xff1a;深入HDMI 2.1 VRR底层&#xff0c;看它如何“驯服”游戏卡顿与撕裂 当你在玩一款高画质游戏时&#xff0c;突然遭遇画面撕裂或卡顿&#xff0c;那种体验就像正在享受美食时咬到沙子。HDMI 2.1标准中的可变刷新率(VRR)技术&#xff0c;正是为解决这一痛…...

nextai-translator:构建本地化AI翻译工作流,实现高质量可控翻译

1. 项目概述与核心价值 最近在折腾一个挺有意思的开源项目&#xff0c;叫 nextai-translator/nextai-translator 。乍一看名字&#xff0c;你可能觉得这又是一个“AI翻译器”&#xff0c;市面上不是一抓一大把吗&#xff1f;但真正上手之后&#xff0c;我发现它的定位和实现思…...

Obsidian BMO Chatbot:在笔记软件中集成AI助手的配置与实战指南

1. 项目概述&#xff1a;在笔记软件里塞进一个AI大脑如果你和我一样&#xff0c;是个重度Obsidian用户&#xff0c;同时又对各种大语言模型&#xff08;LLM&#xff09;爱不释手&#xff0c;那你肯定也经历过这种“精神分裂”般的体验&#xff1a;一边在Obsidian里奋笔疾书记录…...

2026 软考中级 | 信息安全工程师 教材 + 真题笔记 + 刷题小程序(网盘直达)

备考信息安全工程师的同学看过来&#xff01;整理了完整备考资料包&#xff0c;包含官方教材 PDF、信息安全专项笔记、历年真题和模拟刷题小程序&#xff0c;覆盖密码学原理、网络安全防护、系统安全检测、法律法规与合规等核心考点&#xff0c;网盘直接保存&#xff0c;适配最…...

别再拍脑袋设阈值了!手把手教你用SystemVerilog仿真搞定FIFO反压的afull值

从仿真到实战&#xff1a;SystemVerilog动态验证FIFO反压阈值的工程方法论 在数字电路设计中&#xff0c;FIFO的将满阈值(afull)配置不当导致的系统崩溃问题屡见不鲜。我曾亲眼见证过一个千兆以太网项目因为afull值估算偏差3个周期&#xff0c;导致在持续高负载下每72小时必然…...