多态应该算面向对象编程中的一个难点。那么究竟什么才算是多态呢?实际上多态最显著的特征就是晚绑定。如果没有晚绑定,就不是多态。多态建立在封装、继承的基础之上。用它通常的表现的形式来说就是:父类的引用可以指向子类的对象,子类的引用不可以指向父类的对象。这其中就存在着upcast和downcast。所谓的upcast,就是向上类型转换,在使用upcast时,一般可以不使用强制类型转换符号。然而downcast时。就必须使用强制类型转换。这里先举一个简单的例子。
class A
Class B extends A
/*********************upcast**********************/
B b = new B();
A a = b;
/*********************downcast********************/
A b = new B();
B bt = (B)b;//此时(B)是必须的,因为刚开始b类型为A
那么究竟,多态在实际的编程中有什么用呢?多态可以屏蔽子类之间的差异性,用父类的标示公共接口。看下面的代码:
public class Test
{
public void whoIsRuning(Car car)
{
car.fun();
}
public static void main(String[] args)
{
Test test = new Test();
Car_1 car1 = new Car_1();
test.whoIsRuning(car1);
System.out.println("------------------------------------------");
Car_2 car2 = new Car_2();
test.whoIsRuning(car2);
}
}
class Car
{
public void fun()
{
System.out.println("Car is running");
}
}
class Car_1 extends Car
{
public void fun()
{
System.out.println("Car_1 is running");
}
}
class Car_2 extends Car
{
public void fun()
{
System.out.println("Car_2 is running");
}
}
其运行结果为
Car_1 is running
------------------------------------------
Car_2 is running
用父类标识公共接口,直接传入子类,调用子类的方法。