1.父类引用可以指向子类对象,子类引用不能指向父类对象。
2.向上转型:子类引用的对象转换为父类类型称为向上转型,把子类对象直接赋给父类引用叫upcasting,向上转型不用强制转型(类似于低精度赋给高精度不用强制转换)。
如: Father a = new Son();
相当于
Son s= new Son();
Father f=s;
注意:向上转型时,只能调用父类的成员方法,如果子类重写了父类的方法就根据这个引用指向调用子类重写的这个方法(这个方法就是覆盖override)。这个调用过程就称为“动态绑定”。
3.向下转型:父类引用的对象转换为子类类型称为向下转型,把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型(类似于高精度赋给低精度要强制转换)。
- 如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
- 如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。