《我看多态》

什么是多态?为什么要使用多态?什么时候用多态?多态是如何实现的?使用多态有什么好处?   在学习《大话设计模式》的时候经常会遇到多态,但什么是多态?为什么要使用多态?什么时候用多塔?多态是如何实现的?使用多态有什么好处?我们将根据以上五个问题展开激烈的讨论。 什么是多态?   多态,顾名思义指“多种形态”。多态表示不同的对象可以执行相同的动作,但要通过它们自己的实现代码来执行。 例:猪、狗、猫都属于动物类,我们将动物类作为父类,猪“哼哼叫”,狗“汪汪叫”,猫“喵喵叫”,猪、狗、猫三... 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 发现好多初学的朋友对多态部分总是比较模糊,小弟今天在看朋友的学习笔记的时候也发现这个问题,所以借我朋友笔记上的问题,发表一下自己的看法,先假设有继承关系如下的类: 代码: Animal | Mammal | --------------------------------------------------------------- | | | | Dog Cat Raccoon SwampThing (implements (implements Washer) Washer)  interface Washer {}  class Animal {}  class Mammal extends Animal {}  class Dog extends Mammal {}  class Cat extends Mammal implements Washer {}  class Raccoon extends Mammal implements Washer {}  class SwampThing extends Mammal {} 下面的为对这几个类的应用和我朋友的笔记: public class Test14 { public static void main(String[] a) { //---------------------------------- Dog rover,fido; Animal anim; rover =new Dog(); anim=rover; //理解成Animal anim = new Dog(); fido =(Dog)anim; //这段话能够通过编译和运行!!!!! //fido =anim;不能通过编译 //---------------------------------- Washer wawa=new Cat(); SwampThing pogo; pogo=(SwampThing)wawa; //这句话能够通过编译,但不能运行 //两个毫不相干的类对象,居然能够通过编译? //经另外测试,任意两个不相干的类对象cast是会出现编译错误的, //所以,上面的类可能是继承了同一个类的缘故? 我的解释: 首先,我们知道,超类类型的变量可以引用一个子类类型的对象,即 代码: Animal anim = new Dog(); 这样是完全可以的,但是要注意的是编译器只检查且承认定义时候的类型,所以这样定义并赋值的anim变量不能调用Dog类中特有的实例字段和方法,这就是我们通常所说的隐藏,如果我们仍然要用到这些被隐藏的东西怎么办呢,那就是后面我们看到的笔者认为费解的那句: 代码: fido =(Dog)anim; 其实这样只是恢复了被隐藏的功能,并不是把超类对象赋给子类变量,当然,编译器并不管最终这个造型转换能否成功,编译器现在只知道你在把一个Dog型的对象赋值给一个Dog型的变量,这当然没有问题,同样,后面的这样3句 代码: Washer wawa=new Cat(); SwampThing pogo; pogo=(SwampThing)wawa; 也很好理解,编译器只知道你在试图把一个SwampThing型的对象赋值给一个SwampThing型的变量,这当然没问题,注意对象wawa原来是什么类型编译器并不管(这句话并不全面,具体见下面),它只知道不管什么类型已经强制转换成了SwampThing型,至于这种转换会否成功则会在运行时判断,如果不能成功转换当然会抛出异常,这就是为什么总说造型前请用instanceof判断对象本身是否属于要转换的类! 让我们探讨的再深一点: 注意笔者上边最后注释的话是不对的, Cat类与SwampThing类不是毫不相干的,它们都实现了Washer接口,注意变量wawa被定义的类型并不是Cat类型,而是Washer接口类型,所以 代码: pogo=(SwampThing)wawa; 这句话才有可能成功,如果变量wawa被定义为Cat类型,则上面的造型绝对不可能成功,即编译也无法通过!由此我们知道,编译器也会为造型做出判断,不过编译器只会判断被造型的对象有没有可能被造型成功,就象上面的代码,wawa定义的时候是Washer类型,任何实现了这个接口的类的对象都可以被wawa引用,而SwampThing类也实现了这个接口,所以当编译器执行到上面的代码时,编译器只通过对wawa的定义检查,认为wawa有可能指向SwampThing类型的对象,这个造型有可能成功,所以可以被编译成功! 还可以再深一点讨论: 上面例子中笔者注释了这么一句话: //fido =anim;不能通过编译 通过阅读之前的代码我们知道变量anim指向的实际对象和fido的定义类型是一致的,都是Dog,但是不能编译,这是因为编译器只检查anim的定义,发现是Dog的超类,所以我们必须要先类型转换,但是假设可以通过某种方法强制通过编译,那么这句话运行时反而没有问题因为实际类型是匹配的,这种情况可以说正好与上面讨论的能通过编译但是运行出错的情况相反! 总结:正是java中编译器只检查定义类型,运行时检查实际类型的双重检查方式造成了面向对象中多态这种即规范同时又非常有灵活性的机制
【全网最新】使用 1panel面板 部署若依系统( springboot 和 vue)项目 打开前端项目的vue.config.js文件,检查devServer下的proxy代理部分,然后将下面这个端口修改为你要在打包后访问的端口,即使用nginx代理前的接口。这个端口默认是80端口,这里把其修改为不会冲突的8010端口,后台接口的地址配置为9080,不过感觉这里设置的8010和9080可能没有用,因为部署前端静态页面是,也配置了一次网页的外部接口和api的接口,后期有空了再验证。打开右侧的Maven,点击:生存期->package,然后点击运行,等待打包成功,包在如图所示的文件夹中。 阅读详情

相关推荐

QMT量化交易实战:如何用通达信预警数据自动买卖股票(附完整Python代码)

本文详细介绍了如何利用QMT平台结合通达信预警数据实现股票自动化交易,提供完整的Python代码实现。通过实时监控通达信预警板块文件,系统自动执行买卖操作,提升交易效率。文章涵盖系统架构设计、数据对接、信号处理、订单执行等核心模块,适合量化交易初学者和通达信用户参考实践。

weixin_29251567的博客 679

什么是多态

目录 什么是多态 多态的特点 多态存在的三个必要条件 多态时成员变量、静态方法和非静态方法的特点 什么是多态 多态就是一个对象变量可以指向多种实际类型的现象,同一个事件发生在不同的对象上会产生不同的结果。 多态的特点 好处:消除类型之间的耦合关系 弊端:不能用子类方法,可用转型的方法解决 转型: ·向上转型:【自动】父类 父类对象 = 子类实例; Fu f...

weixin_43827227的博客 1万+

Python爬取拼多多商品数据保姆级教程(附源码及效果图)

本文介绍了使用Python爬取拼多多商品数据的完整教程。通过DrissionPage库模拟浏览器操作,利用正则表达式提取嵌入在HTML中的商品数据(关键步骤是从window.rawData变量获取),解析后转换为结构化数据并导出Excel。教程包含八大步骤:环境配置、浏览器初始化、网络监听、搜索模拟、数据提取(核心是正则匹配JSON)、数据验证、字段解析和Excel导出,最后提供了封装好的函数可直接调用。该方法特别适合课程作业或毕业设计获取电商数据,能爬取商品名称、价格、销量等关键信息,处理了价格单位转换等

weixin_46449236的博客 2083

Java中编译时多态与运行时多态

文章目录1. 什么是多态2. 编译时多态3. 运行时多态总结Reference 口诀:成员变量,静态方法看左边;非静态方法:编译看左边,运行看右边 当父类变量引用子类对象时(Father f = new Son();),在这个引用变量f指向的对象中,它的成员变量和静态方法与父类是一致的,他的非静态方法,在编译时是与父类一致的,运行时却与子类一致(发生了复写) 1. 什么是多态 多态是指允许不同子类型的对象对同一行为作出不同的响应。例如在生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞

xylitolz的博客 9381

用LTspice仿真CMOS反相器功耗?这份避坑指南能省你3天调试时间

本文详细介绍了如何使用LTspice准确仿真CMOS反相器的功耗,包括动态功耗、短路功耗和静态功耗的测量技巧。通过工程实践指南,帮助电子工程师避开常见陷阱,优化仿真参数设置,提升仿真结果的可靠性,节省调试时间。

w7x8y9z的博客 190

双模音频解码器设计:USB+蓝牙LDAC平衡输出方案

音频解码器是数字音频系统中实现数模转换的核心组件,其性能直接决定音质保真度与系统延迟。基于高集成SoC的解码方案通过统一时钟域与片内DSP处理,有效抑制Jitter并简化硬件拓扑;结合全平衡模拟输出架构,可显著提升共模抑制比(CMRR)与信噪比(SNR)。该技术路径广泛应用于便携式Hi-Res音频设备、USB-C小尾巴DAC及蓝牙高解析耳机放大器等场景。本文围绕ES9038Q2M双模SoC展开,详解其在LDAC协议支持、UAC2.0兼容性及平衡电流型DAC输出方面的工程实现,为高性能、可量产音频硬件开发提供

weixin_42613018的博客 390

多态

1、多态的基本介绍   所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用...

weixin_30540691的博客 3582

【Claude】Extra inputs are not permitted 错误:代理剥离 Beta 标头的解决方案 bug报错已解决

深入分析Claude Code Extra inputs are not permitted 400错误的技术原理,解析代理剥离Beta标头的根因与多种修复方案。

一键难忘的博客 150

多态 静态多态 动态多态

抽象类提供一个框架,强制子类实现特定的功能。

weixin_43490759的博客 2936

微信小程序 - request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task请求报错

微信小程序请求接口,报request:fail errcode:10011是什么原因,uniapp微信小程序request:fail errcode:10011 cronet_error_code:0 error_msg:network change, cancel all task,微信小程序wx.request常规访问接口,有个别用户的接口请求频繁报错,UniApp 微信小程序uni.request请求接口报错:request:fail errcode:10011 的原因分析与解决方案,苹果ios,安卓

🏆 前端领域优质创作者 4568

2025届程序技术类笔试题

希尔排序在直接插入排序的基础上进行了改进,它通过比较相距一定间隔的元素来进行,各轮比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一轮排序为止。某人逆着水流的方向向岸边划船,每次行进前进x米后需要休息一下,休息期间船会自行倒退y米,每次休息后再次行进,前进距离缩短1/5,若起始距离岸边为m米,问:能否到达岸上,需要行进多少次才能上岸。直接插入排序的原理是将第i个元素插入前面i-1个已排好序的记录中,将比第i个元素大的记录依次向后移动一个位置,将第i个元素插入空位。第二轮相邻比较,后移2次。

博客 599

C++多态——静态多态与动态多态

多态:顾名思义,多态就是多种形态,也就是对不同对象发送同一个消息,不同对象会做出不同的响应。并且多态分为静态多态和动态多态。静态多态就是在系统编译期间就可以确定程序执行到这里将要执行哪个函数,例如:函数的重载,对象名加点操作符执行成员函数等,都是静态多态,其中,重载是在形成符号表的时候,对函数名做了区分,从而确定了程序执行到这里将要执行哪个函数,对象名加点操作符执行成员函数是通过this指针来调用的

stay_the_course的博客 1万+

药物对接仿真软件:HADDOCK_(5).HADDOCK中蛋白质-配体对接流程

半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。半柔性能量最小化阶段是在刚体能量最小化的基础上,允许配体的部分柔性,通过优化配体的构象来进一步提高对接的准确性。如果是PDB格式,确保文件包含所有必要的原子信息。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。对接完成后,HADDOCK会生成一系列的输出文件,包括对接后的蛋白质-配体复合物结构文件、能量评分文件和统计分析文件。

kkchenjj的博客 1085

java 多态的应用——多态数组和多态参数详解

java 多态的应用——多态参数和多态数组内容分享,本篇博文为java 面向对象三大特性——多态篇的补充。

优快云 / 稀土掘金/ B站 / GitHub: Cyan_RA9 3839

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C++ 多态全解析:静态多态与动态多态详解

本文将系统梳理多态的定义、官方权威解释、静态与动态多态的区别、典型代码与注意事项,帮助你彻底搞懂C++多态。

Darker的博客 2327

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

多态性

多态性 多态性的概念 派生一个类的原因并非总是为了继承或添加新成员,有时是为了重新定义基类的成员,使基类成员“获得新生” 面向对象程序设计的真正力量不仅仅是继承,而是允许派生类对象像基类对象一样处理,其核心机制就是多态和动态联编 多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类成员函数的调用,不同的行为是指不同的实现,也就是调用了不同的函数 从广义上说,多态性是指一段程序能够处理多种类型对象的能力 在C++中,这种多态性可以通过重载多态(函数和运算符重载),强制多态(类型强制转换),

weixin_51958878的博客 5264

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java多态:多态多态,多种形态

Java多态:灵活处理对象的行为展现机制

子夜的个人博客 1745

参数多态、包含多态、过载多态和强制多态

多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。     通用多态又分为参数多态(parametric)和包含多态(Inclusion Polymorphism);特定多态分为过载多态(overloading)和强制多态(coercion)。     强制多态(

飞老虎 1万+

面向对象设计领域中的参数多态,包含多态,过载多态和强制多态

在面向对象设计中,多态性是一个重要的概念,它允许我们以一种统一的方式处理不同类型的对象,并根据对象的实际类型来执行相应的行为。通过将具体的对象看作是其父类或接口的实例,并在方法调用时根据实际的对象类型来确定具体的执行逻辑,我们可以以一种统一的方式处理不同类型的对象。- 当方法需要操作的对象类型不确定时,可以使用多态来接受不同类型的对象,减少代码的重复。使用场景: - 当需要执行类似的操作,但操作的参数类型或个数可能不同时,可以使用过载多态来定义多个方法,使得代码更清晰、简洁,并提高代码的可读性。

辣香牛肉面的博客 1468

静态多态和动态多态的区别

#include <iostream> using namespace std; class A { public: virtual void function() { cout << "I am A" << endl; } }; class B :public A { public: void function() { cout << "I used to be A but now I am B" << endl; } void fun

weixin_45027171的博客 6919

C++ 多态详解:从静态多态到动态多态

从字面上理解,多态就是“多种形态”。在程序设计里,它指的是:使用,却可以对做出不同的具体行为。virtual。

2301_80345648的博客 1190

多态性之编译期多态和运行期多态(C++版)

编译期多态和运行期多态(C++版)     C++中最为经典的就是多态性,多态性充分体现了面向对象的思想,并且是C++与C的最大区别之一。多态性分为编译期多态和运行期多态,也称为静态多态和动态多态,有些人也称其为编译时多态和运行时多态,不管什么称呼,万变不离其宗,一个是编译期的静态的多态,一个是运行期的动态的多态,那么它们在C++中分别体现在哪里呢?又有什么区别呢?下面将详细介绍(重点是

君临天下的博客 7244

多态以及多态底层的实现原理

1.必须是基类的指针或者引用去调用虚函数2.虚函数必须完成了重写或者覆盖因为我们前面所将的切片的类型兼容转换,只有基类的指针或者引用才能即指向基类对象又指向派生类对象.虚函数的重写或者覆盖所指的是它的实现重写,这样基类和派生类才能有不同的函数.才能实现多态.class Apublic:public:int main()ptr1->a();ptr2->a();return 0;以上就是多态的实现.

20 • backend dev • building things that just work • learning systems & low level stuff • love video games 943

Java 多态以及多态的实现

编译环境 windows 10 JDK 1.8 eclipse 目录    一、多态的基本概念    二、继承    三、多态的实现    四、多态存在的三个必要条件    五、重写    六、抽象类和抽象方法    七、接口    八、向上转型实现多态    九、多态的优缺点 前言   多态,多态,多态到底是一个什么样的定义呢,充满着好奇心,决定去研究一番。 多态(Polymorphism)的基本概念   多态意味着父类的变量可以指向子类对象。多态是同一个行为具有多个不同表现形式或形态的能力,就

Karbob 2449

编译时多态和运行时多态

编译时多态和运行时多态 多态分为两种情况:编译时多态和运行时多态。如果在编译时能够确定执行多态方法称为编译时多态,否则称为运行时多态。 一、编译时多态 方法重载都是编译时多态。根据实际参数的数据类型、个数和次序,Java在编译时能够确定执行重载方法。 方法覆盖表现出两种多态性,当对象引用本类实例时,为编译时多态,否则为运行时多态。例如,以下声明p、m引用本类实例,调用toString()方法是编译时多态。 public class Test { public static void

twx31420的博客 4997

深入剖析多态,什么是多态?多态有什么用?

前言: 今天我准备探讨一下多态的终极奥义,Java也学习了两年了,但是对于多态一直不是很理解,上周刚刚来到青软实训基地,才有了时间深入学习这些熟知用法而不知底层的知识。 花了一天时间来了解多态存在的意义。本篇博客让我们从一个完全不懂得状态一步步了解什么是多态,深入掌握多态的概念。 什么是多态? 让我们看看百度是怎么定义多态的,话不多说,上图! 望文生义,第一眼看到多态,感觉就是多种...

Bean冷的心的博客 931
上一篇: IoC 容器和DependencyInjection 模式
下一篇: Java打印程序设计全攻略
java169
博客等级 码龄19年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值