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

【JAVA】包、权限修饰符、final关键字、常量、枚举、抽象类、接口

1 包

  • 包是用来分门别类的管理各种不同类的,类似于文件夹、建包利于程序的管理和维护。建包语句必须在第一行
  • 建包的语法格式:package 公司域名倒写.项目名称。包名建议全部小写
  • 相同包下的类可以直接访问,不同包下的类必须导包,才可以使用。假如一个类中需要用到两个类名称一样的类,那么默认只能导入一个类,另一个类需要带包名访问
  • 导包格式:import 包名.类名

2 权限修饰符

  • 权限修饰符:用来控制一个成员能够被访问的范围
  • 可以修饰成员变量、方法、构造器、内部类,不同权限修饰符修饰的成员能够被访问的范围将受到相应的限制
  • 权限修饰符的范围:private<缺省<protected<public
修饰符同一个类中同一个包中的其它类不同包下的子类不同包下的无关类
private
缺省
protected
public

定义成员(方法、成员变量、构造器等)一般满足如下要求:

  • 成员变量一般私有
  • 方法一般公开
  • 如果该成员只希望本类访问,用private访问
  • 如果该成员只希望本类的同一个包下的其他类和子类访问,使用protected修饰

3 final关键字

  • final关键字是最终的意思,可以修饰方法、变量、类
final修饰方法表明该方法是最终方法,不能被重写
final修饰变量表明该变量第一次赋值后,不能再次被赋值(有且仅能被赋值一次
final修饰类表明该类是最终类,不能被继承
  • final修饰的变量是基本类型:那么变量存储的数据值不能发生改变
  • final修饰的变量是引用数据类型:那么变量存储的地址值不能发生改变,但是地址指向的对象内容是可以发生变化的(但是数值可以变化)

4 常量

  • 常量是使用了public static final修饰的成员变量,,而且执行的过程中其值不能被改变
  • 常量的作用和好处:可以做系统的配置信息,方便程序维护,同时也能提高可读性
// 常量命名规范:英文字母全部大写,多个单词下划线相连
public static final String PASS_WORD = "123";

常量的执行原理:

  • 在编译阶段会进行“宏替换”,把使用常量的地方全部替换成真实的字面量
  • 好处:让使用常量的程序的执行性能与直接使用字面量是一样的

选择常量做信息标志和分类:代码可读性好,实现了软编码形式

5 枚举

  • 枚举类都是继承了枚举类型:java.lang.Enum
  • 枚举都是最终类,不可以被继承
  • 枚举类的构造器都是私有的,枚举对外不能创建对象。
public static void main(String[] args) {Season s1 = Season.AUTUMN;Season s2 = Season.WINTER;// !!!!但是不能创建对象//Season s = new Season();}
// 枚举的第一行默认都是罗列枚举对象的名称
enum Season{SPRING, SUMMER, AUTUMN, WINTER;
}

编译后: 

public final class Season extends java.lang.Enum<Season>{public static final Season SPRING = new Season();public static final Season SUMMER = new Season();public static final Season AUTUMN = new Season();public static final Season WINTER = new Season();public static Season[] values();public static Season valueOf(java.lang.String);
}

6 抽象类

在Java中abstract是抽象的意思,如果一个类中的某个方法的具体实现不能确定,就可以申明为abstract修饰的抽象方法(不能写方法体),这个类必须用abstract修饰,被称为抽象类。

// 抽象类
public abstract class Animal{// 抽象方法public abstract void run();
}
  • 抽象类作用:可以被子类继承,让子类来实现方法的具体功能,充当模板,同时也可以提高代码复用
  • 样式:只有方法签名,没有方法体,使用abstract修饰
  • 一个类如果继承了抽象类,必须重写完抽象类中的全部抽象方法,如果不能,则这个类也得改为抽象类
  • 得到了抽象方法,但是抽象类不能创建对象(因为若可以创建对象了,就可以用里面方法,但是又没有方法体)
  • 类的成员(成员变量、方法、构造器)抽象类都具备
  • 不能用abstract修饰变量、代码块、构造器

7 接口

  • 接口只能定义常量和抽象方法,接口不能实例化(就是不能在别的地方new该接口)
public interface Student{// 常量// public static final String NAME = "ABC";// 会默认加上public static final// 下面和上面一样String NAME = "ABC";// 2 抽象方法// 默认加上public abstract//public abstract void score();void score();
}
  • 接口时用来被类实现(implements)的,实现接口的类被称为实现类。实现类可以理解为子类
修饰符 class 实现类 implements 接口1,接口2,....{}
  • 一个类实现接口,必须重写完接口的全部抽象方法,否则这个类需要定义为抽象类
类和类单继承
类和接口多实现
接口和接口多继承,一个接口可以同时继承多个接口

jdk8之后的新增功能:默认方法,静态方法

jdk9新增功能:私有方法(必须在接口内部才能访问)

public interface PeopleInter{// 必须default修饰,默认用public权限// 1 默认方法,接口不能创建对象,这个方法只能给实现类,由实现类的对象调用default void score(){System.out.println("100分")// 3 的私有方法,可以在这调用graduation();}// 2 静态方法,必须使用static修饰,默认public权限// 必须接口名调用,不能实现类调用public static void queryScore(){System.out.println("查询科目分数为满分")}// 3 私有方法,接口内部才能访问private void graduation(){System.out.println("恭喜您毕业啦")}
}// ------------------------------------class Student implements PeopleInter{
}// ====================================class Test{public static void main(String[] args){Student s = new Student();s.score();// 静态方法,接口名调用PeopleInter.queryScore();}
}

注意事项

  1. 接口不能创建对象
  2. 一个类实现多个接口,多个接口中有同样的静态方法不冲突,因为静态方法只能接口名调用
  3. 一个类继承了父类,同时又实现了接口,父类和接口中又重名的方法,默认用父类的
  4. 一个类实现了多个接口,多个接口中存在同名的默认方法,不冲突,这个类重写该方法即可
  5. 一个接口继承多个接口,没有问题,但是若多个接口中存在规范冲突,则不能多继承

相关文章:

【JAVA】包、权限修饰符、final关键字、常量、枚举、抽象类、接口

1 包 包是用来分门别类的管理各种不同类的&#xff0c;类似于文件夹、建包利于程序的管理和维护。建包语句必须在第一行建包的语法格式&#xff1a;package 公司域名倒写.项目名称。包名建议全部小写相同包下的类可以直接访问&#xff0c;不同包下的类必须导包&#xff0c;才可…...

6.s081/6.1810(Fall 2022)Lab5: Copy-on-Write Fork for xv6

前言 本来往年这里还有个Lazy Allocation的&#xff0c;今年不知道为啥直接给跳过去了。. 其他篇章 环境搭建 Lab1: Utilities Lab2: System calls Lab3: Page tables Lab4: Traps Lab5: Copy-on-Write Fork for xv6 参考链接 官网链接 xv6手册链接&#xff0c;这个挺重要…...

项目实战 — 消息队列(7){虚拟主机设计(2)}

目录 一、消费消息的规则 二、消费消息的具体实现方法 &#x1f345; 1、编写消费者类&#xff08;ConsumerEnv&#xff09; &#x1f345; 2、编写Consumer函数式接口&#xff08;回调函数&#xff09; &#x1f345; 3、编写ConsumeerManager类 &#x1f384;定义成员变…...

手把手教你快速实现内网穿透

快速内网穿透教程 文章目录 快速内网穿透教程前言*cpolar内网穿透使用教程*1. 安装cpolar内网穿透工具1.1 Windows系统1.2 Linux系统1.2.1 安装1.2.2 向系统添加服务1.2.3 启动服务1.2.4 查看服务状态 2. 创建隧道映射内网端口3. 获取公网地址 前言 要想实现在公网访问到本地的…...

【Linux取经路】揭秘进程的父与子

文章目录 1、进程PID1.1 通过系统调用接口查看进程PID1.2 父进程与子进程 2、通过系统调用创建进程-fork初始2.1 调用fork函数后的现象2.2 为什么fork给子进程返回0&#xff0c;给父进程返回pid&#xff1f;2.3 fork函数是如何做到返回两次的&#xff1f;2.4 一个变量怎么会有不…...

iOS链式编程风格 -- 富文本字符串

一、概念 链式编程风格是一种将多个函数调用连接起来&#xff0c;形成一条函数调用链的编程风格。这种风格的代码可以通过返回 self 或某个适当的对象来实现。 1.优点 代码简洁、连贯、易于阅读。可以将一个方法的输出直接作为下一个方法的输入&#xff0c;降低中间变量的使…...

后端开发5.Redis的搭建

使用docker安装 Redis【redis】(6379) 拉取Redis镜像 docker pull redis:6.2.6 启动Redis容器 docker run -di --name=redis -p 6379:6379 redis:6.2.6 启动Redis容器并设置密码 docker run -di --name=redis -p 6379:6379 redis:6.2.6 --requirepass "密码" 测…...

推特群推王构建你的流量池

随着社交媒体的兴起&#xff0c;推特已成为了一个信息传播、交流、互动的重要平台。在这个充满了各种声音和观点的数字世界里&#xff0c;如何有效地将自己的声音传达出去&#xff0c;吸引更多的关注和互动&#xff0c;已经成为了一个备受关注的话题。而在这个过程中&#xff0…...

【从零学习python 】12.Python字符串操作与应用

文章目录 学习目标字符串介绍字符串表示方式小总结转义字符 下标和切片一、 下标/索引1. 如果想取出部分字符&#xff0c;那么可以通过下标的方法&#xff0c;&#xff08;注意在计算机中&#xff0c;下标从 0 开始&#xff09;2. 遍历3. 切片 进阶案例 学习目标 字符串的表示…...

MongoDB创建用户 、数据库、索引等基础操作

MongoDB的权限认证是相对来说比较复杂的&#xff0c;不同的库创建后需要创建用户来管理。 本机中的MongoDB是docker 启动的&#xff0c;所以先进入docker的镜像中 docker exec -it mongodb bash 这样就进入到了镜像MongoDB中&#xff0c;然后输入命令连接MongoDB数据库 注…...

Docker容器监控(Cadvisor +Prometheus+Grafana)

环境部署&#xff0c;接着上一篇文章Docker容器部署&#xff08;Cadvisor InfluxDBGrafana&#xff09;开始 目录 1、先清理一下容器 2、部署Cadvisor 3、访问Cadvisor页面 4、部署Prometheus 5、准备配置 6、运行prometheus容器 7、访问prometheus页面 8、部署Grafan…...

家电用PCM板:市场现状研究分析与发展前景预测

家电PCM板属于一种兴起不久的功能性复合材料。属于家电复合外观材料中占比较大的一种。家电复合外观材料主要分为覆膜板&#xff08;VCM&#xff09;系列和有机涂层板&#xff08;PCM&#xff09;系列两大类&#xff1a;VCM系列表面复合各类功能性薄膜&#xff0c;可根据需要实…...

详解lambda表达式(一):表达式定义与异常处理

目录 一、lambda表达式 二、lambda表达式实现函数接口 2.1 函数式接口 2.2 lambda表达式实现无参抽象方法 2.3 lambda表达式实现有参抽象方法 2.4 lambad表达式使用代码块 三、lambda表达式调用外部变量 3.1 lambda表达式可以更改类成员变量 3.2 lambda表达式无法更改…...

UE5、CesiumForUnreal接入WMTS格式地图瓦片,如ArcGIS、Mapbox、天地图

文章目录 1.实现目标2.实现过程2.1 WMTS与TMS2.2 cesium-native改造2.3 CesiumForUnreal插件改造2.4 WMTS瓦片加载测试2.5 EPSG:3857与43263.参考资料1.实现目标 通过改造cesium-native和CesiumForUnreal插件,参考tms的栅格瓦片地图加载逻辑,实现在UE5中通过CesiumForUnreal…...

AI模型公司如何定位 ?

AI模型公司如何定位 ? 企业与消费者&#xff1f; 和 多用途与利基市场&#xff1f; 文本将分解每个象限。 消费类和多用途 最有价值的象限并引发了人工智能热潮。 顶级公司&#xff1a; Open AI - 通过 ChatGPT 为消费者构建&#xff0c;并通过其旗舰 GPT 模型为企…...

C#,OpenCV开发指南(01)

C#&#xff0c;OpenCV开发指南&#xff08;01&#xff09; 一、OpenCV的安装1、需要安装两个拓展包&#xff1a;OpenCvSharp4和OpenCvSharp4.runtime.win 二、C#使用OpenCV的一些代码1、需要加头文件2、读取图片3、在图片上画矩形框4、 在图片上画直线 一、OpenCV的安装 1、需…...

windows永久关闭更新

不要去services.msc 服务里面关闭windowUpdata了&#xff0c;对win11和部分win10根本不管用&#xff0c;下面在教你一招永久关闭&#xff08;原理不是关闭&#xff0c;只是延长更新时间&#xff0c;时间可以设置百年后&#xff0c;所以和关闭差不多&#xff09; windows图形化…...

python类型转换笔记.python运算符笔记

进制 现代的计算机和依赖计算机的设备里都用到二进制(即0和1)来保存和表示数据&#xff0c;一个二进制表示一个比特(Bit)。 在二进制的基础上&#xff0c;计算机还支持八进制和十六进制这两种进制。 除了计算机里的进制以外&#xff0c;我们生活中经常用到的是十进制。 Pyt…...

【CSS】背景图定位问题适配不同机型

需求 如图, 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 , 需要适配不同的机型, 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的, 所以飘带和渐变背景实则两个div 飘带切图如下 , 圆形部分需要契合头像 <view class"box-bg"><…...

20 个实例玩转 Java 8 Stream

先贴上几个案例&#xff0c;水平高超的同学可以挑战一下&#xff1a; 从员工集合中筛选出salary大于8000的员工&#xff0c;并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序&#xff0c;同样薪资者年龄小者在前。将员工按性别分类&…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

Oracle11g安装包

Oracle 11g安装包 适用于windows系统&#xff0c;64位 下载路径 oracle 11g 安装包...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...