面向对象程序设计(OOP)三大特性之多态篇


面向对象程序设计(OOP)三大特性之封装篇
面向对象程序设计(OOP)三大特性之继承篇

前言

“It is better to be clear than to be clever.做的清晰比做的聪明更好。”—Greg McCann

一、多态

上一次课,班上新来的那位漂亮的小姐姐深深的吸引了小黑和小胖,他们两个比之前学习更加用心。因为他们三个总是喜欢坐在第一排,交流的机会自然也就多了起来,慢慢地他们就成为了好朋友…

因为今天是10月24号,詹姆斯·高斯林 (James Gosling)教授带着神秘的礼物过来上课,同学们看见教授拎着这么大包的东西,很好奇。只见他把礼物放在一旁,然后说:同学们,今天是程序员节,老师给认真听课的同学准备了精美的礼物,表现最好的两位同学就可以领取啦。
在这里插入图片描述
坐在后排的山姆心想:程序员节是星期天怎么还要上课呀?

教授熟练地打开事先准备好的ppt,今天要讲的内容是面向对象程序设计的第三大特性—多态(polymorphism)。

多态是指一个对象变量可以指示多种实际类型的现象;
多态就是同一个接口在不同的对象上会产生不同的结果。
如下图所示:
在这里插入图片描述
多态存在的三个必要条件
① 继承(inheritance)
② 重写(override)
③ 超类引用指向子类对象:Parent p = new Child(); // 向上转型
在这里插入图片描述
代码如下(示例):

class Shape {
    
    
    void draw() {
    
    }
}
 
class Circle extends Shape {
    
    
    void draw() {
    
    
        System.out.println("Circle.draw()");
    }
}
 
class Square extends Shape {
    
    
    void draw() {
    
    
        System.out.println("Square.draw()");
    }
}
 
class Triangle extends Shape {
    
    
    void draw() {
    
    
        System.out.println("Triangle.draw()");
    }
}

简单描述,当创建一个Shape对象时将其引用指向子类对象,Shape s = new Square(); 调用s.draw(); // 画一个圆。 只关心等号左边的对象可以做什么,而不关心右边对象的其他特有的功能。

当使用多态方式调用方法时,首先检查超类中是否有该方法,如果没有,则编译错误;如果有,再去调用子类的同名方法。

多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进行通用处理。

注意:
只能在继承层次内进行类型转换;
在将超类转换成子类(向下转型)之前,应该使用instanceof进行检查。

小胖追问:为什么要进行instanceof检查呢?
小黑回答:因为当一个对象与另一个对象没有继承关系进行转换时,就会出现错误。用上面的例子说,Shape s = new Shape(); Rectangle r = (Rectangle)s; 其中Rectangle并没有继承Shape类,所以会转换失败啊。
在这里插入图片描述
因为在课堂上小黑和小胖最认真并且主动思考提问和解决问题,掌握知识的能力也就比别人快了。教授拎起旁边的礼物,郑重地宣布获得这两份大奖的同学,分别是…

最后,小黑和小胖都把礼物赠送给了可爱的蓝眼睛小姐姐,自此之后,他们之间的友谊就像黄金铁三角一样坚定。在学习的道路上,一起成长一起鼓励,最终实现了成为一名优秀程序员的理想,并用自己的能力去change world,让生活变得越来越简单。至于那神秘的礼物是什么,还得从那个故事开始讲起了…


二、小结

小小程序员的日常
在这里插入图片描述
在这里插入图片描述
好啦,本期的OOP内容就暂告一段落了,今天是个特殊的日子,还在改变世界的你,也要注意休息娱乐啊,毕竟身体是码代码的本钱。

猜你喜欢

转载自blog.csdn.net/weixin_48627356/article/details/120934564
今日推荐