发布时间:2026/8/24 14:41:28
Java面向对象进阶—多态 目录1.认识多态2.多态中调用成员的特点3.多态的优势和弊端1.认识多态多态是面向对象的三大特征的最后一个那么我们先了解什么是多态呢实际上就是同类型的对象表现出不同形态。多态的表现形式父类类型 对象名称子类对象。多态的前提1.有继承关系2.有父类引用指向子类对象 Fu fnew Zi();3.有方法重写可以先体会一下多态当我们在IDEA中创建了四个类AdministratorPersonStudentTeacher这四个类之后Person类中有基础的show方法然后每个类中都重写一个新的show方法当我们在Test类中进行测试的时候public class Test { public static void main(String[] args) { //创建三个对象并调用register方法 Student s new Student(); s.setName(张三); s.setAge(18); Teacher t new Teacher(); t.setName(王建国); t.setAge(30); Administrator admin new Administrator(); admin.setName(管理员); admin.setAge(35); register(s); register(t); register(admin); } //这个方法既能接收老师又能接收学生还能接收管理员 //只能把参数写成这三个类型的父类 public static void register(Person p){ p.show(); } } /* 运行输出 学生的信息为张三, 18 老师的信息为王建国, 30 管理员的信息为管理员, 35 */2.多态中调用成员的特点变量调用编译看左边运行也看左边方法调用编译看左边运行看右边public class Test { public static void main(String[] args) { //创建对象多态方式 //Fu fnew Zi(); Animal a new Dog(); //调用成员变量编译看左边运行也看左边 //编译看左边Javac在编译代码的时候会先看左边的父类中有没有这个变量如果有编译成功如果没有则编译失败 //运行也看左边Java运行代码的时候实际获取的是左边父类中成员变量的值 System.out.println(a.name);//动物 //调用成员方法编译看左边运行看右边 //编译看左边同上 //运行看右边运行代码的时候是运行子类中的方法 a.show();//Dog --- show方法 } } class Animal{ String name 动物; // public void show(){ // System.out.println(Animal --- show方法); // } } class Dog extends Animal{ String name 狗; //Override public void show() { System.out.println(Dog --- show方法); } } class Cat extends Animal{ String name 猫; //Override public void show() { System.out.println(Cat --- show方法); } }对于这个该怎么理解呢Animal a new Dog();现在是用a去调用变量和方法的而a是Animal类型的所以默认都会从Animal这个类中去找。对于成员变量来说由于子类和父类是继承关系在子类的对象中会把父类的成员变量也继承下的。比如说父name子name的情况下a.name是调用的父因为在Animal类中。对于成员方法来说如果子类对方法进行了重写那么在虚方法表中会把父类的方法进行覆盖但是实际上还是调用的父方法所以是编译看右边了。我们可以再通过内存图来加深一下想法首先我们是先创建了Animal类然后又用Dog类继承了Animal。然后我们代码往下走在方法区写了Test的主函数。先利用多态创建a是Animal类的然后在方法区加载了Animal和Dog类。注意在Dog类中的show是重写过后的。然后我们会在堆中创建空间分别存父类和子类的name因为这个我们是Animal类的a嘛所以当a.name的时候就会去打印出来“动物”。如果我们是之前的方法Dog dnew Dog()这种方法那我们就是直接访问的子类的name如果子类中没有才会去看父类中的name。当利用show的时候根据调用方法的特点也是直接看重写的show。3.多态的优势和弊端优势1.在多态形势下右边对象可以实现解耦合便于扩展和维护Person pnew Student(); p.work();//当业务逻辑发生改变时后续代码无需修改当我这个不想执行student的work了我想改成teacher的就只需要把第一行后边这个new student改成teacher就可以了。2.定义方法的时候使用父类型作为参数可以接收所有子类对象体现多态的扩展性与便利。可以看在StringBuilder里sb.append就可以直接添加object类型方便了使用。那么多态有什么弊端呢多态弊端父类引用不能直接调用子类独有的方法public class Test { public static void main(String[] args) { //创建对象多态父类引用指向子类对象 Animal a new Dog(); //编译看左边运行看右边执行Dog重写后的eat() a.eat(); //多态弊端父类引用不能直接调用子类独有的方法 //a.lookHome(); //这行会编译报错Animal类中没有lookHome方法 //如果要调用子类特有方法需要向下转型 Dog d (Dog) a; d.lookHome(); //多态父类引用指向Cat子类对象 Animal c new Cat(); c.eat(); //向下转型调用猫特有方法 Cat cat (Cat) c; cat.catchMouse(); } } class Animal{ public void eat(){ System.out.println(动物在吃东西); } } class Dog extends Animal{ Override public void eat() { System.out.println(狗吃骨头); } //Dog子类特有方法 public void lookHome(){ System.out.println(狗看家); } } class Cat extends Animal{ Override public void eat() { System.out.println(猫吃小鱼干); } //Cat子类特有方法 public void catchMouse(){ System.out.println(猫抓老鼠); } }还是刚才的代码如果我想转换类型该怎么做利用instanceof这个关键字进行判断在Java17之后就可以不用再单独写转换直接在判断框内写就可以了public class Test { public static void main(String[] args) { Animal a new Dog(); a.eat(); // ---------------- 旧版本写法 ---------------- /* if(a instanceof Dog){ Dog d (Dog) a; d.lookHome(); }else if(a instanceof Cat){ Cat c (Cat) a; c.catchMouse(); }else{ System.out.println(没有这个类型无法转换); } */ // ---------------- Java17 新模式匹配写法 ---------------- if(a instanceof Dog d){ d.lookHome(); }else if(a instanceof Cat c){ c.catchMouse(); }else{ System.out.println(没有这个类型无法转换); } // 测试Cat对象 Animal b new Cat(); b.eat(); if(b instanceof Dog d){ d.lookHome(); }else if(b instanceof Cat c){ c.catchMouse(); }else{ System.out.println(没有这个类型无法转换); } } }

相关新闻

2026/8/24 14:41:28

eDNA水体样品采集时可以检测的水质指标

检测水质指标可以告诉我们这个水体处于什么环境状态?有没有富营养化、有机污染、盐分/离子增加、缺氧等问题?这些变化有没有可能影响动物或植物群落?指标主要告诉你什么高/低可能意味着什么水温水体热环境高温、季节变化、热污染pH酸碱环境酸…

2026/8/24 14:36:27

94.RAG-RAG应用平台-Dify工作流(大模型和知识库使用说明)

内容参考于:图灵AI大模型全栈 Dify源码地址:https://github.com/langgenius/dify 中文文档:https://docs.dify.ai/v/zh-hans 官方地址: https://cloud.dify.ai/apps 下图蓝框的上一节中写完了,接下来是下图红框的两个 工作流 它是…

2026/8/24 14:36:27

中兴通讯CDO崔丽:全栈TCO最优成为AI基础设施竞争的关键

5月30日, 中兴通讯有一位首席发展官名叫崔丽, 她受到邀请, 出席了在澳门举办的Expo系列活动。在一场名为数字AI峰会也就是AI的活动里, 有一个开场的炉边对话, 主题是“基础设施赋能AI进化”, 在这个对话当中, 她针对多个议题, 和主持人艾诚进行了深入分享, 这些议题包括AI产业演…

2026/8/24 16:51:49

多目标规划:从帕累托最优到NSGA-II的数学建模实战

1. 项目概述:从单目标到多目标的思维跃迁在数学建模的实战中,我们常常会遇到一个核心矛盾:现实世界的问题很少是“非黑即白”的单目标决策。比如,一个城市在规划新工业园区时,既要追求经济效益最大化(产值最…

2026/8/24 16:51:49

电商搜索实战:从DSL构建到前后端模型设计的完整链路解析

1. 项目概述:从零构建商城检索服务的完整链路最近在重构一个电商平台的搜索模块,从页面环境搭建到后端DSL查询与聚合测试,走完了一整个闭环。这个标题“173-178、商城业务-检索服务-搭建页面环境、调整页面跳转、检索查询参数模型分析抽取、检…

2026/8/24 16:51:49

ChatiSS用动态多维基线体系构筑中医AI的第二道护城河

中医AI下半场,比拼的不只是算力和大模型,更是谁掌握标准化、结构化的中医领域知识宇宙。ChatiSS整套参数底盘的完备程度达到了令人惊叹的地步,这套Token底盘,或将成为知医邦在中医智能化赛道长期领跑的关键筹码。但一套静态知识库…

2026/8/24 0:07:22

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 1:12:32

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 1:09:25

3条命令跑通LocalAI:无GPU本地AI引擎部署

3条命令跑通LocalAI:无GPU本地AI引擎部署 【免费下载链接】LocalAI LocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required. 项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI…

2026/8/24 1:09:25

AI推理性能测试怎么做:MLPerf Inference完整上手指南

AI推理性能测试怎么做:MLPerf Inference完整上手指南 【免费下载链接】inference Reference implementations of MLPerf inference benchmarks 项目地址: https://gitcode.com/gh_mirrors/inf/inference 同一个模型换一张卡,速度快多少你知道吗&a…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…