Java的多态中这段代码你是否真正理解

举报
周杰伦本人 发表于 2022/11/29 18:12:19 2022/11/29
【摘要】 Java的多态中这段代码你是否真正理解java的三大特点是什么?封装、继承和多态。这是每个Java程序员张口就来的知识点。封装就是提供接口,真正的实现类无需客户端来进行感知,隐藏了具体的实现细节。继承就不用多说了,多态是通过类的继承来体现的。 多态回忆一下你第一次接触类继承的时候,是否用的是形状类Shape和各种各样的图形长方形Triangle类、Square正方形类。这些具体的图形类继承...

Java的多态中这段代码你是否真正理解

java的三大特点是什么?封装、继承和多态。这是每个Java程序员张口就来的知识点。封装就是提供接口,真正的实现类无需客户端来进行感知,隐藏了具体的实现细节。继承就不用多说了,多态是通过类的继承来体现的。

多态

回忆一下你第一次接触类继承的时候,是否用的是形状类Shape和各种各样的图形长方形Triangle类、Square正方形类。这些具体的图形类继承Shape基类

Shape shape = new Square();
shape.draw();

这段代码的含义就不用多说了,创建方形的对象,然后调用方形的draw()方法进行描绘

但是你有没有想过为什么调用的方形的draw()方法而不是Shape的draw()方法呢?

这就涉及到了一个重要的概念,后期绑定。也就是在运行的时候,方法调用机制会根据对象的类型找到对应的方法体来执行,这也就是为什么会调用正方形类的draw()方法而不是基类Shape的draw()方法。值得注意的是,被final和static修饰的方法会有后期绑定的情况。

final关键字

final在我们平时使用的时候也很重要,它表示最终的,不能再改变的意思,它可以修饰成员变量、类和方法

一般final与static联合起来使用,用来定义一个不被改变的常量,static来保证只有这个一个变量。被final修饰后,对于基本类型来说,它的值不会被改变了;对于一个对象来说,它引用的对象不会被改变了,但对象本身可能会改变,这个final是无法阻止的。

对于final修饰方法的情况,这种很少见,因为它会影响运行效率。

被final修饰的类无法再进行继承,String类就是一个典型的final修饰的类。被final修饰的类,它的所有的方法都是final的,没有任何类可以覆盖它的方法

总结

这篇文章我们讲了Java中的一个重要的概念:多态。多态的出现让我们在实现具体方法的时候无需判断它是具体哪个子类,这是基于方法的后期绑定也就是动态绑定机制来实现的,然后介绍了一下final这个关键字,它通常与static结合使用定义常量,修饰类后类的方法不可被覆盖。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。