《Java编程思想》第8章多态全部反常识高频易错点1、向上转型最普遍的认知误区误区向上转型丢失子类方法/成员反常识真相对象本体永远是子类只是引用的访问接口被收缩重写方法动态执行子类逻辑独有方法只是访问被屏蔽对象本身所有数据、方法完好无损。误区继承是为了复用代码书本核心结论继承设计首要目标是依靠向上转型实现多态、解耦代码代码复用只是附带红利。向上转型百分百安全隐式转换向下强转必须配合instanceof校验否则运行时报类型转换异常。2、绑定机制只有实例普通方法才有动态绑定多态反常识清单static静态方法无重写只有静态遮蔽静态方法绑定引用类型不看堆内真实对象父类引用指向子类对象调用静态方法永远执行父类静态代码不存在多态。final、private方法静态绑定前期绑定private默认等效final子类写同名方法属于全新方法并不是重写编译期就绑定引用类型。成员变量不存在多态变量编译期绑定引用类型父类引用读取变量永远拿到父类属性值和实际子类对象无关。3、构造器内部调用可重写方法极易触发空指针本章经典大坑构造执行顺序父类构造 → 成员变量初始化 → 子类构造体父类构造方法执行时子类的成员变量还完全没有初始化。若父类构造器调用了被子类重写的实例方法会直接执行子类重写代码此时子类字段全是默认值访问子类属性大概率NPE。硬性规范构造方法中绝对不要调用可被重写的方法。NPENullPointerException空指针异常代码去访问 / 调用一个值为 null 的对象的属性、方法程序直接报错崩溃。如下代码父构造执行阶段子类字段还是空的多态强行执行子类方法操作空变量就触发空指针 NPE。classFather{publicFather(){// 父构造调用可重写方法test();}publicvoidtest(){}}classSonextendsFather{Stringinfo;// 构造执行阶段 nullOverridepublicvoidtest(){System.out.println(info.length());// info是null执行直接NPE}}publicclassTest{publicstaticvoidmain(String[]args){newSon();}}4、清理与继承、finalize误区子类销毁时不会自动执行父类清理逻辑需要手动在子类清理方法中主动调用父类清理方法。finalize()依靠GC执行GC时机不可控不能用来释放文件、连接、句柄等系统资源GC只管堆内存回收和业务资源清理毫无关系。5、抽象类 抽象方法易错点包含抽象方法的类必须标记abstractabstract类可以拥有普通成员变量、普通实例方法、构造器。抽象类不能new实例但是拥有构造方法作用是给子类构造时完成父类成员初始化。子类继承抽象类必须实现全部抽象方法否则子类自身也要声明为abstract。6、向下转型 RTTI运行时类型识别编译器不会校验向下转型是否合法只会在运行时校验真实对象类型非法转型直接抛ClassCastException。标准安全写法转型前先用对象 instanceof 目标类判断匹配关系再做强转。向上转型抹平了具体类型想要取回子类独有功能唯一合法手段就是安全向下转型。RTTI:Run-Time Type Information运行时类型信息向上转型后父类引用屏蔽了子类真实类型Animal animal new Dog();编译期只认为 animal 是 Animal编译器看不到真实是 Dog。等到运行时JVM 依靠 RTTI 知晓这个对象本体就是 Dog我们才能安全向下转型。Java 里两种 RTTI 体现形式:传统 RTTI面向 Class 类(Dog) animal 强制向下转型运行时依靠 RTTI 校验类型类型不符抛出ClassCastExceptionanimal instanceof Dog运行时借助 RTTI 判断对象真实类型是否匹配反射机制属于 RTTI 的高级形态7、继承设计的反常识设计理念优先用组合而不是优先使用继承继承用来描述「is-a」关系组合描述「has-a」。继承用来扩展行为、实现多态单纯复用代码优先组合过度继承会造成层级臃肿、耦合严重。不要随意把类设计为可继承不需要被重写的方法建议加final关闭重写入口规避构造器多态这类隐蔽bug。8、private方法的“假重写”陷阱父类private方法子类定义一模一样签名的方法语法不会报错但并不是重写。父类引用指向子类调用该私有方法执行的永远是父类私有方法子类方法只是一个全新的独立方法无任何重写特性。题目巩固第1题单选在父类的构造方法中调用一个可被子类重写的普通实例方法会发生什么情况A. 执行父类原本的方法实现B. 执行子类重写方法子类成员变量已经完成初始化C. 执行子类重写方法子类成员变量为默认初始值极易引发空指针异常D. 编译直接报错禁止该写法正确答案C解析普通实例方法遵循动态绑定父类构造执行时会运行子类重写代码对象初始化顺序为先父类构造、再初始化子类属性、最后执行子类构造体此时子类自定义变量均为默认值引用类型为null访问极易触发NPE该写法编译不会报错属于隐藏的运行时bug。第2题单选Java中RTTI运行时类型信息的核心作用是A. 编译阶段提前校验父子类转型是否合法B. 程序运行阶段识别对象真实的所属类型C. 提升向上转型的运行效率D. 让静态方法具备多态特性正确答案B解析向下转型的合法性校验不在编译期依靠运行时RTTI完成校验RTTI作用就是运行时判定对象真实类型支撑instanceof、强制向下转型功能RTTI和运行效率优化无关静态方法为静态绑定不支持多态。第3题单选关于静态方法与重写说法正确的是A. 子类重写父类静态方法存在动态绑定支持多态B. 父类引用指向子类对象调用静态方法执行子类静态方法C. 子类同名静态方法覆盖父类该现象叫做静态遮蔽无多态D. private静态方法可以被子类正常重写正确答案C解析静态方法编译期静态绑定不存在动态绑定与多态静态方法跟随引用类型执行父类引用只会执行父类静态方法子类同名静态方法属于静态遮蔽并非真正的方法重写private方法对子类不可见无法完成重写。第4题单选向上转型的本质描述准确的是A. 将子类对象销毁新建一份父类对象B. 本体依旧是子类对象只是引用的访问接口被缩小C. 向上转型之后子类独有的方法被永久清除D. 向上转型需要手动强制转换格式书写正确答案B解析向上转型不会销毁堆中的子类实体对象仅通过父类引用屏蔽子类独有方法方法本体依然存在向下转型即可恢复调用向上转型属于隐式自动转换不需要强制书写代码。第5题单选继承的首要设计目的是A. 复用父类已有代码减少重复编码B. 依靠向上转型实现多态实现代码解耦与扩展C. 方便子类扩充成员变量D. 替代组合关系完成业务封装正确答案B解析代码复用只是继承带来的附加收益并非语言设计继承的初衷继承核心价值是依托向上转型实现多态解耦程序结构扩充属性、替代组合都不是继承的设计目标开发优先使用组合。第6题单选关于向下转型与RTTI错误的说法是A. 向下转型语法编译能够通过合法性依靠运行时RTTI校验B. 搭配instanceof判断本质就是借助RTTI获取对象真实类型C. 向上转型丢失了子类对象本体数据向下转型也无法复原D. 未经判断直接强转类型不匹配时运行抛出ClassCastException正确答案C解析向下转型仅做语法检查真实类型校验交由运行时RTTI处理instanceof底层依赖RTTI识别真实类型向上转型只会收缩访问权限子类完整数据、方法全部保留合法向下转型即可正常使用子类功能非法强制转型会抛出类型转换异常。第7题单选抽象类相关规则正确的是A. 抽象类不能拥有构造方法B. 抽象类中只能存放抽象方法不能写普通实例方法C. 子类继承抽象类若不实现全部抽象方法子类必须声明为abstractD. 使用new关键字可以直接实例化抽象类对象正确答案C解析抽象类具备构造方法作用是给子类初始化父类成员只是无法直接实例化抽象类可包含普通方法、成员变量、静态代码块等内容未实现父类所有抽象方法的子类自身必须定义为抽象类抽象类禁止使用new创建对象。第8题单选关于父类private方法子类书写一模一样方法签名的代码下列说法正确的是A. 属于方法重写具备多态特性B. 不属于重写只是子类全新的独立方法C. 父类引用指向子类会执行子类该私有同名方法D. private方法默认动态绑定正确答案B解析父类私有方法对子类不可见无法构成重写不存在多态效果子类同名方法只是自身独立方法和父类私有方法互不干扰父类引用只会执行父类的私有方法private方法等同于final采用静态绑定。第9题单选面向对象设计原则中类的功能复用优先选择下面哪一种方式A. 继承B. 组合C. 重写方法D. 向上转型正确答案B解析《Java编程思想》规范优先组合谨慎使用继承继承代表强耦合的is-a关系仅适合描述从属关系不适合单纯用来复用代码重写、向上转型都不属于代码复用的基础方案。第10题单选finalize方法以及资源释放的描述正确的是A. 依靠GC执行finalize关闭文件、数据库连接十分安全可靠B. GC只会回收堆内存空间不会主动释放操作系统各类资源C. 调用System.gc()后finalize方法必定立刻执行D. 对象内存被回收对应的文件句柄会被JVM自动释放正确答案B解析finalize执行时机不确定甚至不会执行严禁用来释放系统资源GC只负责回收堆内存文件句柄、网络连接等系统资源必须手动close关闭System.gc()只是给JVM的回收建议无法强制GC执行内存回收不会同步释放系统句柄会造成句柄泄漏问题。链接《Java编程思想》重点章节踩坑学习规划
企业数字化 ERP 产品动态
相关推荐
跨模态VLA模型:视觉语言动作迁移技术解析 1. 跨模态智能体迁移的技术突破去年在机器人实验室调试机械臂时,我发现一个有趣现象:当操作员口头描述"把红色方块放到蓝色盒子左侧"时,经过多模态训练的机器人竟能准确执行指令,而传统编程方式完成同样任务需要编写数十… · 2026/11/15 0:56:31
Docker开发环境配置与优化实战指南 1. 为什么需要Docker开发环境?刚入行那会儿,每次换新电脑或者带新人,最头疼的就是配开发环境。记得有次帮同事装Python环境,明明照着同样的步骤操作,他的机器上就是报SSL错误,折腾了两天才发现是系统自带的… · 2026/11/15 0:56:31
Docker开发环境最佳实践与效率优化 1. 为什么需要Docker开发环境?作为开发者,你一定遇到过这样的场景:新同事入职后花了两天时间配环境,结果还是跑不起来项目;本地调试正常的代码,上了测试服务器就各种报错;想尝试新工具却担心污染… · 2026/11/13 10:54:41
30天速通特种作业架子工上岗证!官方报名入口不踩坑全攻略 30天速通特种作业架子工上岗证!官方报名入口不踩坑全攻略 怕考不过白交培训费?特种作业架子工上岗证不是你想考就能考的,一不小心就多花冤枉钱。现在就告诉你怎么避开那些坑,找到 官方报名入口 ,顺利拿到证,省时省钱又省心。… · 2026/11/15 0:56:31
特种工和技工上岗必备材料全解析,别再被坑了 特种工和技工上岗必备材料全解析,别再被坑了 你有没有因为手里没有特种作业证,被工地老板拒之门外?有没有因为不懂流程,浪费了大把时间和金钱?特种工和技工上岗必备的材料,不只是几张纸那么简单,它直接关系到你的职业发展和安全责任。特别是在平顶山这… · 2026/11/15 0:56:31
杭州城建局电工证通过率揭秘:外省证书能不能转过来? 杭州城建局电工证通过率揭秘:外省证书能不能转过来? 之前考的证在外省能不能转过来?这是很多电工同行的共同疑问。尤其是像郑州这样的工程大市,很多人都在外地考过证,回来后发现本地的政策、流程、要求都不一样,心里没底。而杭州城建局电工证的通过率揭… · 2026/11/15 0:56:31
南阳市电工证培训学校网上查询学时要求全解析 南阳市电工证培训学校网上查询学时要求全解析 你正为找工作发愁,却发现没有电工证根本进不了门?别急,南阳市电工证培训学校网上查询最新学时要求,能帮你解决燃眉之急。特种作业证是进入电工岗位的“硬门槛”,尤其是在南阳,电工证不仅关系到你的职业起点… · 2026/11/15 0:56:31
低压电工证学历不够怎么报?华北电网电工作业证上岗必备全攻略 低压电工证学历不够怎么报?华北电网电工作业证上岗必备全攻略 你是不是也经常听说, 学历不高怕报不上名 ?尤其是准备报考 华北电网电工作业证 的你,心里可能早就打鼓了。但别急,这其实是个老生常谈的问题,今天我就用… · 2026/11/15 0:56:31
地方电工证能不能用 在哪考避免白交培训费 地方电工证能不能用 在哪考避免白交培训费 怕考不过白交培训费?地方电工证能不能用?这是很多准备报考低压电工证或高压电工证的朋友最关心的问题。很多人担心自己在本地考的证,到外地用不了,甚至到期换证也麻烦,其实只要选对了地方,流程清晰,根本不用… · 2026/11/15 0:55:31
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
长春初级电工证怎么考?通过率揭秘全在这里 长春初级电工证怎么考?通过率揭秘全在这里 之前考的证在外省能不能转过来?这几乎是每个想从事电工工作的人都会问的问题。特别是那些在外地打拼多年、手里握着一张“外地电工证”的人,到了长春想继续干这一行,第一反应就是“我的证能用吗?”。今天我们就… · 2026/11/15 0:00:50
国内电工证报考条件与考试时间 低压电工证怎么考?学历不高也能报名,官方报名入口全在这 你是不是经常听说“电工证是入行门槛”,但又担心自己学历不够、经验不足,根本报不了名?别急,今天就带你从零了解【国内电工证】的报考流程、考试内容,还有怎么在 官方报名入口… · 2026/11/15 0:00:50
电工作业时如何断电?电子证书到底能不能全国通用? 电工作业时如何断电?电子证书到底能不能全国通用? 实操考试心里没底怕挂科,特别是电工作业时如何断电这一操作,不仅关系到你能不能拿到证书,更关系到以后能不能顺利上岗。很多人觉得这不过就是“断个电”,但其实这里面的门道可不少,稍有不慎就可能出错… · 2026/11/15 0:00:50
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:12:21
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 6:11:51
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/13 22:31:30