面向对象——多态

一、什么是多态?java

二、Java中如何实现多态?函数

三、多态存在的3个必要条件spa

四、两种形式的多态设计

五、晚联编code

六、多态机制优势对象

七、面向对象的主要优点blog

八、代码重用的意义继承

 

一、什么是多态?接口

public class Tree { int age = 0; public void name() { System.out.println("Tree"); } public static void main(String[] args) { Tree tree = new Poplar(); tree.name(); System.out.println(tree.age); } } class Poplar extends Tree { int age = 4; public void name() { System.out.println("Poplar"); } }

output:开发

Poplar 0

多态性是OOP中的一个重要特性,主要是用来实现动态联编的。就是程序的最终状态只有在执行过程当中才被决定而非在编译期间就决定了。这对于大型系统来讲能提升系统的灵活性和扩展性。

二、Java中如何实现多态?

java引用变量有两个类型:一个是编译时的类型,一个是运行时的类型,编译时的类型由声明该变量时使用的类型决定,运行时的类型由实际赋给该变量的对象决定。若是编译时类型和运行时类型不一致。就会出现所谓的多态。

三、多态存在的3个必要条件

继承、方法重写、父类引用指向子类对象。

注意:引用变量在编译阶段只能调用其编译时类型所具备的方法,但运行时执行它运行时类型所具备的方法。所以,编写java代码时,引用变量只能调用声明该变量时所用类里包含的方法。例如Object o = new Person(),对象o就只能调用object类的方法。(《疯狂Java讲义》)

与方法不一样的是,对象的属性不具有多态性。

多态特征:对外一个接口,内部多种实现

四、两种形式的多态

运行时多态和编译时多态。编译时多态主要是经过重载(overloading)技术实现的,即在一个类中相同的方法名可用来定义多种不一样的方法。运行时多态是在面向对象的继承性的基础上创建的,是运行时动态产生的多态性。

把子类当作父类处理的过程叫作上塑造型(upcasting)。

五、晚联编

多态机制使得程序能够只向类继承体系的基础类发消息,而却能够在运行时获得恰当子类所提供的服务。这是如何实现的呢?

面向对象的程序设计语言实现多态的技术是动态绑定或晚联编(late binding)技术。对应于晚联编是非面向对象语言编译器所采用的早联编(early binding)方式。早联编方式中由编译器产生对一个特定函数名称的调用,由链接器把该方法调用解析为该方法所对应代码的绝对地址。面向对象语言由于程序直到代码运行时才能肯定代码的地址,因此早联编的方式是不适用的。在晚联编方式中,当向一个对象发消息时,所调用的代码直到运行时刻才能肯定。语言的编译器能够保证该方法存在而且执行参数与返回结果的类型检查,但殊不知道要执行的准确代码。在运行时刻,java运行系统根据对象变量当时所指向对象的实际类型,调用该对象的相应方法。

C++为了提升程序运行效率,方法默认是不采用晚联编的,必须对采用晚联编的方法用virtual关键字显示说明。java中默认采用晚联编。

六、多态机制优势

①   使程序具备良好的可扩展性(对于一个类体系能够动态增长新的类型或减小类型,已经存在的访问这个类体系对象的代码依然能够正常工做)

②   使程序易于编写,易于维护,而且易于理解(在对具备继承关系的一组类进行处理时,只要根据这组类中的基础类接口编写一个方法就能够了,不用针对不一样的子类专门编写代码,简化程序编写且易于维护,使程序结构获得简化,易于理解)

七、面向对象的主要优点

更好的可重用性、可扩展性、可管理和可维护性。最大的优点是代码重用。可重用的代码是类和对象,面线对象中的数据抽象、封装、继承、多态等特征都围绕和体现了代码重用的思想。

八、代码重用的意义

◆ 因为使用大量可重用的类库,提升了开发效率,缩短了开发周期,下降了开发成本;

◆ 因为采用了已经被证实为正确、有效的类库,提升了程序代码的可靠性,减小了程序的维护工做量;

◆ 提升了程序的标准化程度

相关文章
相关标签/搜索