栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

想到一个多态与final的关系的问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

想到一个多态与final的关系的问题

多态,想必大家不陌生吧?
final,想必大家也不陌生吧?
那final修饰的方法会怎么样想必大家也不陌生吧?
到这里,我还真想到几个问题。想必大家面试时经常遇到一个问题
==与equals的区别是什么?
这个问题想必大家都能答对吧,这不就是一个继承+多态机制+如何返回true或者false的问题吗?随便看看源码不就就能解决的问题。(但本人目前还没有工作)
如果不重写equals方法,显然和 = =毫无区别,因为equals最原始的逻辑就是= =,如果重写了此方法,就看你怎么实现返回真假的逻辑了。当然了,有些final类重写了此方法,并且实现了equals的逻辑,这你改不了啊,比如String类!
这都不是此文要谈的重点,但好像也有点关系哈,还要谈一点的是。
Object里还有几个方法,如wait, notify, notifyall。因为这些方法提供的功能已经不需要修改或者增强了,显然我们普通程序员,绝大多数是不可能了。既然如此,为了杜绝普通程序员修改或者增强(怎么可能增强),干脆用fina修饰好了。因为这些方法定义在Object里,而Object又是所有类的顶级基类,再加上继承机制,每个类的实例都具有这些方法的功能了,而且都一样,因为官方限制你重写了啊。而equals就不是那么重要了,想怎么重写就怎么重写,因为这个方法和系统可以说没什么关系。
再谈一点啊。
模板方法设计模式你能够调用的那个public方法也一般是final修饰的,而供你重写的一般是protected修饰的抽象方法,public那个方法里已经固定了对这些抽象方法的调用顺序,显然这些调用顺序不希望你重写啊,故用final修饰。这些关键字在设计模式中的运用是真的灵活呀!
多态机制的体现是这样的:声明的引用类型的变量是基类(父类)或者接口类型的,给这个已经声明的类型赋的值,须为这个基类的子类的引用类型或者接口的实现类的引用类型,这样在调用在父类中(或者接口中)声明的方法时,如果这些方法被重写,调用的就是被重写后的逻辑,这里体现的是多态机制。如果这些方法没被重写,体现的则是继承来达到方法的复用。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/702187.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号