向上转型:子类向上转型为父类
注意点:转型后父类与子类的同名函数中,子类的函数可以覆盖父类的函数,但子类自己定义的函数将被隐藏
class A{ public void A1(){ System.out.println("父类方法1"); } public void A2() { System.out.println("父类方法2"); } } class B extends A{ public void A1() { System.out.println("子类方法1"); } public void B2() { System.out.println("子类方法2"); } } public class C{ public static void main(String args[]){ A a=new B(); //upcast } }
向下转型:父类被强制转型为子类,成功转型后可以成为子类的一个对象
注意点:
转型之前要进行类型检验,对于类型不同的不能进行转型。
这是因为a1指向一个子类B的对象,所以子类B的实例对象b1当然也可以指向a1。而a2是一个父类对象,子类对象b2不能指向父类对象a2。A a1 = new B(); // 向上转型 a1.aMthod(); // 调用父类aMthod(),a1遗失B类方法bMethod1()、bMethod2() B b1 = (B) a1; // 向下转型,编译无错误,运行时无错误 b1.aMthod(); // 调用父类A方法 b1.bMethod1(); // 调用B类方法 b1.bMethod2(); // 调用B类方法 A a2 = new A(); B b2 = (B) a2; // 向下转型,编译无错误,运行时将出错 b2.aMthod(); b2.bMethod1(); b2.bMethod2();