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

Java多态大冒险:当动物们开始“造反”

欢迎来到Java多态的奇幻世界!在这里,动物们不再乖乖听话,而是各有各的脾气。准备好一起探索这个充满继承、重写和类型转换的动物园了吗?

第一章:继承王国里的“造反”运动

在我们的动物园里,有一位大家长——Animal老爷子。他定了两条规矩:

java

public void run() {System.out.println("动起来");
}
public void eat() {System.out.println("吃起来");
}

但孩子们长大了,都有自己的想法了!

Bird首先造反:“我才不要普通地动起来,我要飞飞飞!”
Cat也不甘示弱:“跑跑跑才是王道!”
Fish干脆躲水里:“游游游才是最优雅的!”

于是乎,重写(Override)大战开始了!每个子类都用自己的方式实现了run()方法。老爷子很无奈,但也只能接受——这就是多态的魔力!

第二章:父类的“面具游戏”

现在到了最神奇的部分——父类的引用指向子类对象:

java

Animal animal;
animal = new NewCat();
animal.run(); // 输出:小小猫跑跑跑

看见了吗?Animal打扮成NewCat的样子,但一开口还是猫叫!这就好比爸爸穿上了儿子的潮牌卫衣,看起来年轻了,但一开口还是那句“早点睡觉”!

第三章:强制类型转换的“认亲现场”

有时候动物们会玩过头,需要被强制认亲:

java

Animal animal3 = new NewFish();
if (animal3 instanceof Fish) {Fish fish1 = (Fish) animal3;System.out.println(fish1);
}

这就像是你看见一只穿着鱼外套的动物,你得先确认它真的是鱼,才能让它回到鱼缸里。如果不是鱼却硬要把它当鱼,就会得到一个ClassCastException——相当于动物大喊:“我不是鱼!我是鸟!放开我!”

第四章:final的“终极封印”

最后我们遇到了final关键字,它是Java世界里的“终极封印”:

java

static final int a = 10;
static final int[] arr = {5,3,5,2};

被final修饰的基本类型就像纹身——一旦刻上就不能改变(a=20?想都别想!)。而被final修饰的引用类型就像结婚证——你不能换人,但可以让人改变(arr[0]=200?这个可以!)。

final类像是“绝育”的类——不能有后代(继承)。final方法则是“家传秘方”——子类不能修改。

至于final防止指令重排序...这就好比妈妈对你说:“先写作业再玩手机!”——保证了顺序,避免了你偷偷玩手机还说作业写完了的混乱局面!

结语

多态就像是一场盛大的化妆舞会:Animal老爷子穿着各种子孙的服装,但本质上还是那个可爱的老爷子。有时候需要揭开面具看看真面目(强制转换),有时候需要一些不可改变的规则(final)。

记住:好的代码就像和谐的动物园,每种动物都有自己的特点,但又都在Animal的统筹之下。现在,让你的代码也“动起来”吧!(不过记得,Bird是“飞飞飞”,Cat是“跑跑跑”,Fish是“游游游”,可别搞混了!)

http://www.xdnf.cn/news/1363753.html

相关文章:

  • leetcode-hot-100 (二分查找)
  • 实用电脑小工具分享,守护电脑隐私与提升效率21/64
  • LengthFieldBasedFrameDecoder 详细用法
  • excel 破解工作表密码
  • 无锁队列的设计与实现
  • 记一次 element-plus el-table-v2 表格滚动卡顿问题优化
  • 【学习记录】CSS: clamp、@scope
  • 一键编译安装zabbix(centos)
  • Go编写的轻量文件监控器. 可以监控终端上指定文件夹内的变化, 阻止删除,修改,新增操作. 可以用于AWD比赛或者终端应急响应
  • go-redis库使用总结
  • 跨语言统一语义真理及其对NLP深层分析影响
  • 人体工学优化:握力环直径 / 重量设计与便携性、握持舒适度的协同分析
  • Spring Security(第五篇):从单体到前后端分离 —— JSON 响应与处理器实战
  • 0826xd
  • QtExcel/QXlsx
  • 力扣82:删除排序链表中的重复元素Ⅱ
  • 《Password Guessing Using Large Language Models》——论文阅读
  • 离线可用的网络急救方案
  • JavaScript Intl.RelativeTimeFormat:自动生成 “3 分钟前” 的国际化工具
  • [React]Antd Select组件输入搜索时调用接口
  • 基于RFM模型的客户群体大数据分析及用户聚类系统的设计与实现
  • 【Flink】运行模式
  • 文献阅读笔记:KalmanNet-融合神经网络和卡尔曼滤波的部分已知动力学状态估计
  • Zabbix Vs. Grafana
  • win11中系统的WSL安装Centos以及必要组件
  • nmcli命令详解
  • Docker:网络连接
  • SQL性能调优
  • 2025年8月25日-8月31日(qtopengl+ue独立游戏)
  • 告别“复制粘贴”式换肤:我用Adobe XD组件变体与CC库,构建多品牌设计系统架构