什么是final修饰 使用final修饰类、方法、变量的区别?

在这里插入图片描述

简介:

变量成为常量,不允许修改

  1. 当final修饰类时,该类变为最终类(或称为不可继承的类)。不能从最终类派生子类。这样做的目的是为了防止其他类修改或扩展最终类的行为。
  2. 当final修饰方法时,该方法成为最终方法(或称为不可重写的方法)。不能在子类中对最终方法进行重写或覆盖。这通常用于确保某个方法的行为在整个继承层次结构中始终保持一致。
  3. 当final修饰变量时,该变量成为最终变量(或称为常量)。一旦给最终变量赋予初值后,其值将不能再被更改。这种常量通常使用大写字母命名,并且必须在声明时进行初始化。

作用:

提供程序设计中的安全性和稳定性,防止对类、方法和变量的不必要修改。 优化程序性能,编译器可以在编译阶段对final修饰的内容进行优化。
提供约束和规范,使代码更易读、理解和维护。

1. final修饰类:

当一个类被final修饰时,它表示该类是不可继承的,即不能有子类。这样做的目的是为了防止其他类对该类进行扩展或修改。如果你希望某个类在整个程序中保持不变并且不被继承,那么可以将其声明为final类。

final class FinalClass {
    // 类的内容
}

在上面的例子中,FinalClass是一个被final修饰的类,因此不能有其他类继承它。如果尝试创建一个继承自FinalClass的子类,编译器将会报错。

2.final修饰方法:

当一个方法被final修饰时,它表示该方法不可被子类重写(覆盖)。也就是说,该方法的实现在父类中是最终的,无法在子类中进行修改。这通常用于确保某个方法的行为在继承层次结构中始终保持一致。

class ParentClass {
    final public function finalMethod() {
        // 方法的内容
    }
}

class ChildClass extends ParentClass {
    // 无法重写finalMethod方法
}

在上面的例子中,ParentClass中的finalMethod方法被声明为final,因此无法在ChildClass中对其进行重写。

3. final修饰变量:

在PHP中,final关键字并不能直接用于修饰变量。PHP中没有像Java那样的显式方式将变量声明为常量(不可更改)。但是,可以使用常量来实现类似的效果。常量在定义后不能被修改,因此起到了类似final修饰变量的作用。但可以使用const进行定义常量

class MyClass {
    const FINAL_VARIABLE

总结

修饰对象特点
不能被继承,不允许有子类
方法不允许被重写(覆盖)
变量变量成为常量,不允许修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/124057.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

采集Prestashop独立站

这是一个用Lua编写的爬虫程序,用于采集Prestashop独立站的内容。爬虫程序使用代理信息:proxy_host: jshk.com.cn。 -- 首先,我们需要导入所需的库 local http require(socket.http) local url require(socket.url)-- 然后,我们…

集合框架:List系列集合:特点、方法、遍历方式、ArrayList,LinkList的底层原理

目录 List集合 特有方法 遍历方式 1. 使用普通 for 循环: 2. 使用增强型 for 循环(foreach): 3. 使用迭代器(Iterator): 4. 使用 Java 8 的流(Stream)API&#xff…

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集

Python按类别和比例从Labelme数据集中划分出训练数据集和测试数据集 前言前提条件相关介绍实验环境按类别和比例从Labelme数据集中划分出训练数据集和测试数据集代码实现输出结果 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容&#x…

六大排序算法:插入、选择、冒泡、快排、希尔、归并

1、插入排序 解析&#xff1a;第一个元素设定为已经排好序&#xff0c;依次选择后续的元素插入到已经排好序的组内进行排序。 图示&#xff1a; 代码&#xff1a; public static void insertionSort(int[] arr) {int n arr.length;for (int i 1; i < n; i) {int key a…

视频剪辑高手的秘诀:如何从视频中提取封面,提高视频点击率

在视频分享平台上&#xff0c;一个吸引人的封面往往能吸引更多的观众点击。一个好的封面可以传达视频的主题&#xff0c;吸引人们的兴趣&#xff0c;提高视频的点击率。那么&#xff0c;如何从视频中提取封面呢&#xff1f;下面&#xff0c;让我们一起来看看云炫AI智剪如何操作…

计算机网络期末复习-Part1

1、列举几种接入网技术&#xff1a;ADSL&#xff0c;HFC&#xff0c;FTTH&#xff0c;LAN&#xff0c;WLAN ADSL&#xff08;Asymmetric Digital Subscriber Line&#xff09;&#xff1a;非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术&#xff0c;它提供…

小白该如何学习Linux操作系统?

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 Linux作为一种开源操作系…

行人检测综述 之 精华提取——图表与挑战

From Handcrafted to Deep Features for Pedestrian Detection:A Survey 从手工制作到深度特征的行人检测&#xff1a;一项调查 调查内容&#xff1a; 关于行人检测的传统算法和深度学习算法&#xff1b;关于行人检测的单光谱检测和多光谱检测&#xff1b;关于行人检测的多种数…

2023.11.09 homework (2)

【七年级上数学】 教别人也是教自己&#xff0c;总结下&#xff1a; 13&#xff09;找规律的题目&#xff0c;累加题目&#xff0c;要整体看&#xff0c;不然不容易算出来&#xff0c;求最大值&#xff0c;那么就是【最大值集群和】减去【最小集群和】就是最大值 9-12&#x…

falsk框架中安装flask-mysqldb报错解决方案

错误示例 我的是py37版本&#xff0c;无法直接安装flask-mysqldb pip install flask-mysqldb报错如下 解决方案 先去第三方库 https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient 下载mysqlclient 这个是我的版本 mysqlclient-1.4.6-cp37-cp37m-win_amd64.whl 下…

数据权限-字段权限【实践篇-结合相关业务详细讲解如何实现】(基于若依框架)

理论看这个 https://blog.csdn.net/weixin_41842550/article/details/119890216 这里写目录标题 按照部门结构和用户数据来实现数据权限一 需要的基础数据1 系统管理--部门管理--增加如下结构2 系统管理--角色管理--增加两个角色3 系统管理--用户管理--增加7个用户 二 截图和代…

35岁危机来临前,程序员如何未雨绸缪?

程序员逼近35岁”高龄“&#xff0c;救命。。。 &#xff08;目瞪口呆)什么&#xff1f; 程序员而立之年&#xff0c;为未来担忧&#xff1f;&#xff08;双手抱头不敢置信&#xff09; 不可能&#xff01;他们明明那么努力、那么辛苦了&#xff01;&#xff01;&#xff01;&a…

SQL审计是什么意思?目的是什么?有什么好处?

很多刚入行的运维小伙伴对于SQL审计不是很了解&#xff0c;不知道其是什么意思&#xff1f;使用SQL审计的目的是什么&#xff1f;使用SQL审计的好处有哪些&#xff1f;这里我们大家就来一起聊聊&#xff0c;仅供参考哈&#xff01; SQL审计是什么意思&#xff1f; 【回答】&…

【原理篇】三、SpringBoot自动配置原理

文章目录 0、背景demo1、自动配置思路2、META-INF/spring.factories3、Redis自动配置4、自定义一个自动配置5、排除SpringBoot内置自动配置类的加载6、补充点&#xff1a;ApplicationContextAware接口 0、背景demo 用一个循序渐进的示例来体验属性配置&#xff0c;方便后面理解…

Oracle 安装及 Spring 使用 Oracle

参考内容&#xff1a; docker安装oracle数据库史上最全步骤&#xff08;带图文&#xff09; Mac下oracle数据库客户端 Docker安装Oracle docker能安装oracle吗 Batch script for add a auto-increased primary key for exist table with records Docker 安装 Oracle11g 注意&a…

用Java(C语言也可以看)实现冒泡排序和折半查找(详细过程图)+逆序数组

目录 一、冒泡排序 1.冒泡排序介绍 2.排序的思路 3.完整代码 二、折半查找 1.折半查找介绍 2.查找的思路 3.完整代码 三、逆序数组 1.逆序思路 2..完整代码 一、冒泡排序 冒泡排序是众多排序的一种&#xff0c;无论在C语言或者Java中都很常见&#xff0c;后续在数据…

浅谈智能变电站自动化系统的应用与产品选型

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;现如今&#xff0c;智能变电站发展已经成为了电力系统发展过程中的内容&#xff0c;如何提高智能变电站的运行效率也成为电力系统发展的一个重要目标&#xff0c;为了能够更好地促进电力系统安全稳定运行&#xff0c;…

轻量封装WebGPU渲染系统示例<22>- 渲染到纹理(RTT)(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/RTTTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class RTTTest {private mRscene new RendererScene()…

使用 Threejs 从基础开始构建 3D 地球

需求 threejs学习-3D 地球 实现&#xff1a; 1、使用粒子效果模拟宇宙星空 2、贴图、模型等资源的加载 3、加载资源的监听 4、效果合成器 EffectComposer 的初级使用 5、在地球上设置坐标以及坐标涟漪动画 6、标点间建立飞线 7、简单动画建议先浏览一遍git地址上代码&#xff…