分享

java程序员修炼之路基础篇七:多态

 新用户0175WbuX 2022-01-25

  "多态"是java开发语言的重要特征之一,在前面的文章中我们已经陆续地跟大家探讨了"封装"和"继承"。今天我们就聊一聊"多态"的概念和应用。

  "多态"是程序在执行过程中的一种"动态绑定"行为,怎么理解这个所谓的"动态绑定"呢?简单说就是对象在不同情况下有不同的表现行为。这句话依然不太好理解,如果我把多态的具体表现形式进行一下归类和总结,那么对理解"多态"的概念将变得具体化。

  "多态"的表现形式可以简单的总结为"两个方法三个定义"。"两个方法"包括方法重载、方法重写,"三个定义"包括父类定义子类构建、接口定义类实现、抽象类定义实体类实现。

  我在前面的文章中已经阐述了"方法重写"的概念,即:"一个前提、三个相同、两个规定",不清楚的读者可以看我前面发布的文章。而"方法重载"的定义是:在同一个类中定义了多个方法,具有相同的名字不同的参数列表,简单说"方法重载"其实描述的是程序的一种"多态性"。看一个关于"方法重载"的实例:

  java程序员修炼之路基础篇七:多态

  例子中定义了两个方法paint,一个没有参数,一个有String类型的参数。在方法被调用时,系统能够根据用户是否传递参数来自动判断调用的是哪一个paint,体现了程序的"多态性"。另外,构造器也可以重载定义多个,看下面的实例:

  java程序员修炼之路基础篇七:多态

  这个例子既有"构造器重载"的描述,又有this的应用,大家可以做一个实验,通过结果理解概念。

  以上描述的是"方法重载"和"方法重写",下面我们看一下"三个定义"。首先是"父类定义子类构建",它的意思是对象的定义类型是父类类型而赋值的却是子类的对象,这种情况在java中是允许的,也是"多态"的一个重要应用。下面看一个实例:

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  上面的实例是一个典型的"多态"应用,调用的方法在运行时进行了"动态绑定",最终执行的是子类中的方法。有"动态绑定"自然就有"静态绑定",所谓的"静态绑定"是在类定义完之后就确定了方法的绑定,看一个实例:

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  例子中子类定义了一个与父类中完全一致的方法,但是这个并不是"方法重写",因为我在上一篇文章中跟大家说过,static方法是不能被重写的。那么为什么可以定义且使用乐器呢?因为这种定义称为"隐藏",也就是子类隐藏了父类中的方法,通过实验的结果我们会发现它和非static方法的结果是不同的。

  在实际编程中还有一种情况比较常见,就是"接口定义类实现",看一个实例:

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  随着大家对java语言学习的深入,由接口进行定义实现类进行赋值这种情况将会越来越常见,这也是模块化开发的必然结果。在java web开发中,开发人员使用的大部分元素都是接口,而具体的实现则是由"容器"来完成的。开发人员不需要关心具体的实现过程,只需要把注意力放在自己的逻辑实现上就可以了,大大提高了开发的效率和程序的稳定性,这也是未来开发的发展方向之一,开发人员将更为专注。

  最后一个定义是"抽象类定义实体类实现",这个定义其实和"父类定义子类构建"一脉相承,区别在"抽象"上。负责构建的类要实现抽象类中的抽象方法才能完成赋值,看下面的实例:

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  在"多态"的应用中有一个运算符号经常被提及,它就是"instanceof"运算符,这个运算符能够完成类型的判定,在需要进行具体类型判定时需要它的帮助,看下面的实例:

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  java程序员修炼之路基础篇七:多态

  另外,"三个定义"中的对象只能使用声明时类型中的方法,不能使用自己的独特方法,如果要使用则需要进行"强制类型转换",通常在进行"强制类型转换"时,需要使用"instanceof"运算符。

  "多态"的理解和应用是作为java开发人员的必备知识,建议大家多做实验。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多