多态

多态的概念

  多态主要是指同一种事物表现出来的多种形态。

    饮料:可乐、雪碧、红牛、脉动、。。。

    宠物:猫、狗、鸟、小强、鱼、。。。

    人:学生、教师、工人、保安、。。。

    图形:举行、圆形、梯形、三角形、。。。

多态的语法格式

  父类类型 引用变量名 = new 子类类型();

如:

  Shaper sr = new Rect();

  sr.show();

多态的特点

  当父类类型的引用指向子类类型的对象时,父类类型的引用可以直接调用父类独有的方法。

  当父类类型的引用指向子类类型的对象时,父类类型的引用不可以直接调用子类独有的方法。

  对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本(动态绑定)。

  对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本。

引用数据类型之间的转换

  引用数据类型之间的转换方式有两种:自动类型转换 和 强制类型转换。

  自动类型转换主要指小类型向大类型的转换,也就是子类型转为父类型,有叫做向上转型。

  强制类型转换主要指大类型向小类型的转换,也就是父类型转换为子类,也叫做向下转型或显示类型转换。

  若强制的目标类型并不是该引用真正指向的数据类型时则编译通过,运行阶段发生类型转换异常。

  为了避免上述错误的发生,应该在强转之前进行判断,格式如下:

    if(引用变量 instanceof 数据类型)

    判断引用变量指向的对象是否为后面的数据类型

案例1:演示多态的使用,引用数据转换

父类Shape:

 子类Rect:

 

 测试类ShapeRectTest:

 

多态的实际意义:

  多态的实际意义在于屏蔽不同子类的差异性实现通用的编程带来不同的效果。

案例1-2、多态的使用场合一:通过参数传递形成多态

扩展类:Circle

 测试类:ShapeTest

案例2、多态的使用场合之二: 直接在方法体中使用抽象类的引用指向子类类型的对象

 总结:

  在测试类中编写draw方法,把两个子类传入调用各自的方法。

  使用多态的形式,在编译阶段传入父类的参数,运行阶段调用子类的方法

原文地址:https://www.cnblogs.com/xujiaqi/p/13592429.html