首页 > 代码库 > Java--多态

Java--多态

一、多态概述

   多态是继封装、继承之后,面向对象的第三大特性。

 

现实事物经常会体现出多种形态,如学生,学生是人的一种,则一个具体的同学张三既是学生也是人,即出现两种形态。

 

Java作为面向对象的语言,同样可以描述一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。

    格式:就是父类引用指向子类对象

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

二、多态成员特点

    A:多态成员变量

      当子父类中出现同名的成员变量时,多态调用该变量时:

      编译时期:参考的是引用型变量所属的类中是否有被调用的成员变量。没有,编译失败。

      运行时期:也是调用引用型变量所属的类中的成员变量。

      简单记:编译和运行都参考等号的左边。编译运行看左边。

     B:多态成员方法

      编译时期:参考引用变量所属的类,如果没有类中没有调用的方法,编译失败。

      运行时期:参考引用变量所指的对象所属的类,并运行对象所属类中的成员方法。

      简而言之:编译看左边,运行看右边

三、多态向上转型与向下转型

     多态的转型分为向上转型与向下转型两种:

 

     A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程。

 

     使用格式:当Student类继承Person类时

          Person p=new Student();

     B:向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用转为子类引用,这个过程是向下转型。如果是直接创建父类对象,是无法向下转型的

     使用格式:Student stu=(Student)p;

四、优缺点

  多态的优缺点

      优点:可以提高可维护性(多态前提所保证的),提高代码的可扩展性

   缺点:无法直接访问子类特有的成员

 

 

Java--多态