Java面向对象(8)多态

来源:互联网 发布:网络推广工程师 编辑:程序博客网 时间:2024/05/17 01:50

多态

April 25, 2016 8:48 PM By DeiMo

多态概述

定义:某一类事物的多种存在形态。
例如:动物中的猫,狗

    Cat cat = new Cat();

同时猫也是动物中的一种,也可以把猫称为动物。

    Animal animal = new Cat();    动物是猫和狗具体事物中抽取出来的父类型。    父类型引用指向了子类对象

简单说:就是一个对象对应不同类型

多态在代码中的体现:父类或者接口的引用指向其子类的对象。

多态的好处

提高了代码的扩展性,前期定义的代码可以使用后期的内容。

多态的弊端

前期定义的内容不能使用(调用)后期子类的特有的特有内容

多态的前提

1.必须有关系:继承or实现
2.必须由覆盖。

多态注意事项

1.向上提升:

    Animal a = new Cat();//自动类型提升,猫对象提升了动物类型。但是特有功能无法访问

作用就是限制对特有功能的访问

2.向下转型

    Cat c = (Cat)a;//向下转型的目的是为了使用子类中的特有方法    c.catchMouse();

向下转型的目的是为了使用子类中的特有方法。

3.总结:无论是向上提升还是向下转型,自始自终都是子类对象在做着类型的变化。

instanceof关键字

用于判断对象的具体类型。通常在向下转型前用于健壮性的判断

public static void method(Animal a){    a.eat();    if(a instanceof Cat){        Cat c = (Cat)a;        c.catchMouse();    }else if(a instanceof Dog){        Dog d = (Dog)a;        d.lookHome();    }else{        ...    }}

多态时成员特点

1.成员变量

  • 编译时:参考引用型变量所属的类中是否有调用的成员变量。有,编译通过,否则编译失败
  • 运行时:参考引用型变量所属的类中是否有调用的成员变量,并运行该所属类中的成员。
  • 总结:编译和运行都参考等号的左边。

2.成员函数(非静态)

  • 编译时:参考引用型变量所属的类中的是否有调用的函数。有,编译通过,没有,编译失败。
  • 运行时:参考的是对象所属的类中是否有调用的函数。
  • 总结:编译看左边,运行看右边。

3.静态函数

  • 编译时:参考引用型变量所属的类中的是否有调用的静态方法。
  • 运行时:参考引用型变量所属的类中的是否有调用的静态方法。
  • 总结:编译和运行都看左边。其实对于静态方法,是不需要对象的。直接用类名调用即可。
0 0
原创粉丝点击