多态:可以理解为事物具有多种形态,比如人:男人,女人。
多态的体现:父类的应用指向自己的子类对象,换句话说,就是子类对象的类型可以定义为父类,比如说,我建立了一个猫的对象,我把它定义为动物类型,这时可以的。
举个实例说明一下:
abstract class Animal
{
abstract void eat();
void sleep()
{
System.out.println("睡觉");
}
}
class Cat extends Animal
{
public void eat()
{
System.out.println("吃老鼠");
}
}
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
}
class Demo
{
public static void main(String[] args)
{
Animal c=new Cat();//很明显是猫的对象,但类型是动物类
eat(c);//c虽然是猫的对象,但它的类型是Animal,所以可以作为实参
}
public static void eat(Animal a)
{
a.eat();
}
}
上例很明显地看出多态的好处,试想一下,如果Demo类中eat函数想看所有动物吃什么,如果没有多态,那么有几个类就要写多少个函数,如果继承动物类的子类很多,那没有多态想实现该功能是不现实的,有了多态,在写需要调用子类对象的函数时就可以把参数类型定义为父类类型,初始化对象时也定义为父类类型。不过多态也有弊端,在使用多态时,只能调用子类与父类共有的方法,而不能调用子类特有的方法。
===========================================================================================================================
多态这种特殊的定义对象方法中存在着对象类型转换的过程,对象类型转换分为两种:向上转型和向下转型。多态中对象的初始化就是向上转型:Animal c=new Cat(),父类做类型,子类是对象,这是自动的,而向下转型类似于强制类型转换:Animal c=new Cat(); Cat a=(Cat)c,把原先为父类类型强制转换为子类。
===========================================================================================================================
在对象类型的转换过程中如果对象不属于被转换成的类型怎么办?(对象属于对象本身的类及其父类)这时应该加入一条判断语句instanceof:Animal c=new Cat(); if(c instanceof Cat){},格式就是:对象名 instanceof 类名;返回值是boolean型,属于就是true,不属于就是false。