Java 修饰符和多态
文章目录
- 一、修饰符
- 1. 权限修饰符
- 2. 状态修饰符
- 2.1 final
- 2.2 static
- 二、多态
- 1. 成员访问特点
- 2. 多态中的转型
- 3. 多态案例
一、修饰符
1. 权限修饰符

2. 状态修饰符
2.1 final
final 关键字是最终的意思,可以修饰成员方法、成员变量及类。
//1.修饰成员变量
public final int age = 20; //age的值不允许再改变
//2.修饰成员方法
public final void method() {} //该方法不允许被重写
//3.修饰类
public final class Father {} //该类不允许被继承
final 修饰的特点:
① 修饰方法,表明该方法是最终方法,不能被重写;
② 修饰变量,表明该变量是常量,不能再次被赋值;
③ 修饰类,表明该类是最终类,不能被继承。
final 修饰的是基本类型的变量时,变量的数据值不能发生改变,当 final 修饰引用类型的变量时,变量的地址值不能发生改变,但地址里面的内容是可以改变的!
2.2 static
static 关键字是静态的意思,可以修饰成员方法和成员变量。
//Student.java
public static String university;
//Test.java
Student.university = "太原理工大学"; //直接通过类名为所有对象的公共部分赋值
static 修饰的特点:
① 被类的所有对象共享,这也是我们判断是否使用静态关键字的条件;
② 被 static 修饰的变量和方法,可以通过对象名调用,也可以直接通过类名来调用,推荐使用类名调用。
静态成员方法只能访问静态成员,即 static 只能访问 static!
二、多态
多态,同一个对象在不同时刻表现出来的不同形态。
举例:
我们可以说米是米,米 rice = new 米();
我们也可以说米是粮食,粮食 food = new 米();
这里米在不同的时刻就表现出来了不同的形态,这就是多态。
多态的前提和体现:
① 有继承或者实现关系;
② 有方法重写;
③ 有父类引用指向子类对象。
1. 成员访问特点
Animal a = new cat();
System.out.println(a.age);
System.out.println(a.eat());
(1)Cat 类继承 Animal 类,不管是访问 a 的成员变量还是成员方法,程序都会先去 Animal 里面找,如果找不到该变量或方法,程序直接报错,即编译看左边。
(2)如果我们访问的是成员变量 a.age,同时在 Animal 类中也找到该变量时,我们所访问到的 age 也正是 Animal 中的 age,即访问成员变量执行看左边。
(3)如果我们访问的是成员方法 a.eat(),同时在 Animal 类中也找到该方法时,我们此时访问到的 eat() 应是 Cat 类中重写父类方法的 eat(),即访问成员方法执行看右边。
2. 多态中的转型
① 多态的好处:提高了程序的扩展性,定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与操作;
② 多态的弊端,不能使用子类特有的功能,因为编译看左边,当多态访问成员变量或方法的时候,都是先去父类中寻找的,而父类中当然没有子类特有的功能,当它找不到的时候编译就会报错。
针对多态的弊端,有什么解决办法呢?
多态转型分为向上转型和向下转型,向上转型即父类引用指向子类对象,向下转型是父类引用转为子类对象。
我们通过向下转型的方法解决不能使用子类特有功能的问题。
Animal a;
//向下转型
a = new Cat();
Cat c = (Cat)a;
c.playGame();
//向上转型
a = new Dog();
a.eat();
3. 多态案例
//Animal.javapackage com.zxe;public class Animal {private String name;private int age;public Animal() {}public Animal(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void eat() {System.out.println("动物吃东西!");}
}
//Cat.javapackage com.zxe;public class Cat extends Animal {public Cat() {}public Cat(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("猫爱吃鱼!");}public void call() {System.out.println("喵喵喵~");}
}
//Dog.javapackage com.zxe;public class Dog extends Animal {public Dog() {}public Dog(String name, int age) {super(name, age);}@Overridepublic void eat() {System.out.println("狗爱吃骨头!");}
}
//Test.javapackage com.zxe;public class Test {public static void main(String[] args) {//这里仅以Cat为例,Dog同理Animal a = new Cat();a.setName("加菲猫");a.setAge(5);System.out.println(a.getName() + ", " + a.getAge());a.eat();//想要用Cat的特有方法,向下转型即可Cat c = (Cat) a;c.call();}
}

相关文章:
Java 修饰符和多态
文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思,可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…...
学了一年Java的我,想转嵌入式了
秋名山码民的主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平有限,如发现错误,还请私信或者评论区留言! 目录前言为啥我想去转行?如果我现在选择转硬件,我…...
【Git】Git冲突与解决方法
目录 一、Git冲突如何产生? 二、解决Git冲突—手动修改冲突 【第一步】在 hot-fix 分支上增加如下代码,并且提交。 【第二步】在master 分支上同样的地方增加如下代码,并且提交。 【第三步】 我们现在在 master 分支上合并 hot-fix 分支&a…...
深度剖析数据在内存的存储
目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点,大家都拿起笔记本,…...
身高排序(绝对值大的排后面,小的排前面)
题目描述 小明今年升学到了小学一年级,来到新班级后,发现其他小朋友身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序 输入描述 第一行为正整数H和N 0 < H < 200 为小明的身高…...
高频前端面试题之HTML篇(三)
11. label的作用是什么?是怎么用的? label元素不会向用户呈现任何特殊效果,但是,它为鼠标用户改进了可用性,当我们在label元素内点击文本时就会触发此控件。也就是说,当用户选择该标签时,浏览器…...
使用DG备份恢复测试库的流程以及可能出现的问题
使用DG备份恢复测试库的流程以及可能出现的问题 评估数据量和服务器存储空间从DG备库备份全库和归档日志清理测试库环境测试库恢复备份(一)从DG主库备份控制文件测试库恢复备份(二)从DG备库备份最新的归档日志测试库恢复备份(三)需要单独备份数据文件的情况思路:从DG备库…...
Springboot注释解析
SpringBootApplication 标注主程序类 说明一个spring boot应用 SpringBootConfiguration 标注为spring boot配置类 EnableAutoConfiguration 开启自动配置功能 AutoConfigurationPackage 自动配置包 Import({Registrar.class}) 导入一个容器到组件 Registrar.class…...
C语言之通讯录(动态 存储文件版)
目录 前言 一.基本思路 二.代码的实现 2.1通讯录菜单 2.2通讯录的定义及功能 2.3函数实现 2.3.1初始化通讯录 2.3.2文件信息传递到通讯录里 2.3.3扩容通讯录 2.3.4增加联系人 2.3.5删除联系人 2.3.6查询联系人 2.3.7修改联系人 2.3.8打印通讯录 2.3.9信息保留在文…...
Linux 工具
文章目录一、软件包管理:yum1. 软件的生态环境2. yum 的使用3. yum 源及分类4. 在 centos 7.6 下更新 yum 源到国内镜像5. yum 命令二、编辑器:vim1. 命令模式2. 底行模式3. 插入模式4. 替换模式和视图模式5. vim 配置三、编译器:gcc/g1. C语…...
Java知识复习(七)常见的设计模式(装饰、代理、观察、策略、建造)
前言 参考书籍:《秒懂设计模式》 1、装饰器模式(Decorator) 1、装饰器模式:对原始对象动态地进行“包装”,是对类实例“装饰”的结果;类似于继承的效果,但这个过程是动态的,是可设…...
Linux系统看门狗应用编程
目录看门狗应用编程介绍打开设备获取设备支持哪些功能:WDIOC_GETSUPPORT获取/设置超时时间:WDIOC_GETTIMEOUT、WDIOC_SETTIMEOUT开启/关闭看门狗:WDIOC_SETOPTIONS喂狗:WDIOC_KEEPALIVE看门狗应用编程实战在产品化的嵌入式系统中&…...
Spring MVC 源码- LocaleResolver 组件
LocaleResolver 组件LocaleResolver 组件,本地化(国际化)解析器,提供国际化支持回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 LocaleResolver 组件,可以回到《一个请求的旅行过程》中的 Dispat…...
Servlet
Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。 …...
简单的周总结
做一个简单的周总结。 校 OJ 上打了近 7 场比赛,ZR 及其他平台各一两场左右。 头几场打的中规中矩,分数大致在 100-200 左右,与同学分数差别不太大,但也没有很突出。 后面几场比较爆炸,分数一直在 100 以下࿰…...
Elasticsearch7.8.0版本进阶——IK中文分词器
目录一、ES 的默认分词器测试示例二、IK 中文分词器2.1、IK 中文分词器下载地址2.2、ES 引入IK 中文分词器2.3、IK 中文分词器测试示例三、ES 扩展词汇测试示例一、ES 的默认分词器测试示例 通过 Postman 发送 GET 请求查询分词效果,在消息体里,指定要分…...
一个阿里P6的说不会接口自动化测试,他不会是自己评的吧...
序 近期和一个阿里的测试工程师交流了一波,他竟然说我不会接口自动化测试,我当场就不服了我说你P6自己评级的吧,今天就带大家好好盘一盘接口自动化,本着以和大家交流如何实现高效的接口测试为出发点,本文包含了我在接…...
规则引擎与风控系统04:风控系统实例(下)
上一节把风控实例的基础代码都撸了出来。接下来再来把核心服务代码和规则文件写出来。 因为有了实体类、Dao,所以接来下就可以写服务类了。之前说过这个实例就是要实现两个目的: 1、一分钟内连续访问三次以上,就会被直接封杀; 2、黑名单用户登录会记录可疑事件。 所以服务类…...
我为什么选择Linux mint 21.1 “Vera“ ? Mint安装优化调教指南(分辨率DPI)
前言:为什么是Mint 笔者算是Linux老用户了,作为一个后端开发,尝试了多种不同发行版。 一开始是Manjaro这种Arch系,但是其对于开发而言实在是太过不稳定;每次滚动更新都要解决很多冲突。不适合当生产力(本…...
雅思经验(十四)
剑10 test3 阅读p3这篇阅读比较难做下来,主要是这个题材我们不太熟悉,介绍了一种成为拉皮塔人,他们在太平洋上航行,很多岛屿上都有他们足迹,后来人们发掘、探索他们的历史的故事。1.derelict 与 abandoned 主要是前面的…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
基于服务器使用 apt 安装、配置 Nginx
🧾 一、查看可安装的 Nginx 版本 首先,你可以运行以下命令查看可用版本: apt-cache madison nginx-core输出示例: nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
