一.  多态:多态是面向对象的三大特征之一。即同一种类型的对象( 同一种父类的引用 ),执行相同的方法,结果却不同。

二.  多态的类型

                1.   编译时多态:又叫设计时多态,方法的重载就是编译时多态。

                2.   运行时多态:也是我们主要要学的。

                          (1).  多态的实现:子类继承父类。

                                                       在子类中重写父类的方法。

                                                       向上转型和向下转型。

                          (2).  向上转型: 又名自动转型或者隐式转型,即父类的引用指向子类的实例。

                                                    语法格式:父类类型 父类引用 = new 子类类型( );

                                                    向上转型的优点:面向父类编程,方便代码的扩展。

                                                    向上转型的缺点:不能调用子类特有的方法。

    向上转型后,创建出来的引用可以调用父类派生给子类的方法,但是不能调用子类独有的方法;在执行过程中,引用对象会根据具体调用哪个子类类型来决定执行哪个方法或者属性。


                         (3).  向下转型: 又名强制转型,即将一个指向子类对象的父类引用赋值给一个子类的引用。

                                                   语法格式:子类类型 子类引用 = ( 子类类型 )父类类型的引用[ 实质还是指向子类对象 ];

                                                   向下转型的优点:父类可以访问子类独有的方法。

向下转型之前最好先进行类型判断,通过" instanceof "关键字来实现类型的判断。语法格式:" A instanceof B ",判断A对象是否是B类型的实例,如果A对象是B类型或者是B类型的子类对象或者A对象和B类型有共同的特性等,都会返回true,则可以进行转换;反之返回false,则不能进行转换。在该格式中instance关键字左边是对象,右边是要转换的类。使用instanceof关键字做判断可以提高代码的健壮性。


                        (4).  多态的形式:Ⅰ. 父类类型做形参:当一个方法中的形式参数列表是父类类型的,则我们在调用该方法并传递实参时,我们可以传递父类类型的实参;也可以传递其子类类型的实参,来得到不同的结果,从而实现多态。

                                                       Ⅱ. 父类类型做属性:当调用属性并给属性赋值时,我们可以给该属性赋父类类型的数据,也可以赋子类类型的数据,来实现调用同一属性名但得到的值不同,从而实现多态。

                                                       Ⅲ. 父类类型做返回值:当一个方法在定义时的返回值类型是父类类型时,在方法体中的返回语句可以是父类类型的也可以是其子类类型,来实现同一方法返回不同类型的值,从而实现多态。