向上转型,从右往左看 子类对象–>父类引用
向下转型 从右往左看 父类引用–>子类对象 父类引用必须是要向下转的类
如果父类引用不是要向下转的类,就会报向下转换异常
解决办法:instanceof 先进行判断在进行类型转换
public class 向下转型 {
public static void main(String[] args) {
//向上转型,从右往左看 子类对象-->父类引用
A a = new ZiA();
a.fun();
//向下转型 从右往左看 父类引用-->子类对象 父类引用必须是要向下转的类
ZiA zia = (ZiA)a;
zia.sf();
zia.fun();
//如果父类引用不是要向下转的类,就会报向下转换异常
A a2 = new A();
if (a2 instanceof ZiA) {
ZiA zai2 = (ZiA)a2;
System.out.println("向下转型成功");
}else {
System.out.println("类型不一致,不能向下转型");
}
}
}
class A
{
public void fun(){
System.out.println("这是一个父类的fun方法");
}
}
class ZiA extends A
{
public void fun(){
System.out.println("这是子类重写父类的fun方法");
}
public void sf(){
System.out.println("这是子类特有的方法。。。。");
}
}