多态Polymorphism

 

 

概述

面向对象有四个特征,抽象,继承,封装,多态,抽象,继承,封装是多态的基础,多态是抽象,继承,封装的表现。

 

什么是多态

不同类的对象对同一消息作出不同的响应就叫做多态。就像上课铃响了,上体育课的学生跑到操场上站好,上语文课的学生在教室里坐好一样。

 

多态的作用

简单讲就是解耦。再详细点讲就是,多态是设计模式的基础,不能说所有的设计模式都使用到了多态,但是23种中的很大一部分,都是基于多态的。

多态存在的三个条件

  • 有继承关系  
  • 子类重写父类方法  
  • 父类引用指向子类对象

补充一下第二点,既然多态存在必须要有“子类重写父类方法”这一条件,那么以下三种类型的方法是没有办法表现出多态特性的(因为不能被重写):

1、static方法,因为被static修饰的方法是属于类的,而不是属于实例的

2、final方法,因为被final修饰的方法无法被子类重写

3、private方法和protected方法,前者是因为被private修饰的方法对子类不可见,后者是因为尽管被protected修饰的方法可以被子类见到,也可以被子类重写,但是它是无法被外部所引用的,一个不能被外部引用的方法,怎么能谈多态呢

 

多态的分类

1、编译时多态,即方法的重载,从JVM的角度来讲,这是一种静态分派(static dispatch)

2、运行时多态,即方法的重写,从JVM的角度来讲,这是一种动态分派(dynamic dispatch)

关于这一点,在写到JVM的时候会详细讲到。

 

分析多态问题的几条原则

如果不去理解多态的原理,就从使用的角度来讲,以个人的学习的经验,总结出了多态无非就是三句话:

比如我们有一个父类Father,有一个子类Children

1、向上转型是自动的。即Father f = new Children()是自动的,不需要强转

2、向下转型要强转。即Children c = new Father()是无法编译通过的,必须要Children c = (Children)new Father(),让父类知道它要转成具体哪个子类

3、父类引用指向子类对象,子类重写了父类的方法,调用父类的方法,实际调用的是子类重写了的父类的该方法。即Father f = new Children(),f.toString()实际上调用的是Children中的toString()方法,

servlet继承了HttpServlet,重写了doGet()方法(被service()调用),使用时,service调子类的doGet()

 

 

全部评论

相关推荐

小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-16 12:18
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务