想先梳理一遍自己比较模糊的概念。
- 多态:需要使用基类对象的任何地方,都可以使用派生类代替。函数的形参,很多时候就是基类的对象,甚至直接就是Object类的对象。
- 向上转型:类似于隐式类型转换。具体而言,就是要用到基类的时候,都可以用派生类对象实现。这种类型转换总是安全的。因为式从一个小范围转换成了大范围。
- 向下转型:类似于先显式类型转换。就是将基类转换为派生类。而这种转型通常会出现问题。
例:请实现一个派生类对象转换成基类对象的例子。
public class Lab5_1 {
/*基类Person*/
public class Person
{
/*属性*/
private String name;
private String gender;
private int age;
/*方法*/
public void say() { } //抽象方法
}
/*Person的子类:Father*/
class Father extends Person
{
/*方法*/
public void say()
{
System.out.println("Father can speak Chinese.");
}
public void drive()
{
System.out.println("Father can drive car.");
}
}
/*Father的子类:Son*/
class Son extends Father
{
/*方法*/
public void say()
{
System.out.println("Father can speak Chinese and English.");
}
public void drive()
{
System.out.println("Son can drive airplane.");
}
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
Lab5_1 t=new Lab5_1();
/*向上转型:右侧创建一个子类对象,把这个对象当作父类使用*/
/*!注:向上转型总是安全的,因为从一个小范围转换成了大范围*/
Person f=t.new Father(); //将子类对象向上转型为父类对象
/*另一种写法:
Person p1=null;
p1=t.new Father();
*/
f.say();
Father s=t.new Son();
s.drive();
}
}