上转型:重写父类方法才调用子类方法,其他仍用父类的,包括被子类隐藏的父类成员变量,而且不能调用子类新增的成员变量和成员方法。
下转型:只能是转上去的才能转下去。下转型类似于该子类直接继承父类。
package Pack1; public class updown { public static void main(String[] args) { // TODO Auto-generated method stub A obja; B objb; obja=new B();//obja为子类B对象的上转型对象 //上转型用的仍然是父类的成员变量 System.out.println("上转型对象 obja: "+"a1 = "+obja.a1+" "+"a2 = "+obja.a2+' '); //上转型用的仍然是父类的方法 obja.arithmeticOperation(10, 10); //上转型,若父类中的方法被子类重写,则用子类 obja.fatherMethod(); //上转型不能访问子类中新增的成员变量和方法 //System.out.println(obja.c1); objb=(B)obja; //下转型后,父类的成员变量被子类隐藏,用子类的成员变量 System.out.print(" 强制转换对象 objb: "+"a1 = "+objb.a1+" "+"a2 = "+ objb.a2+" "); objb.arithmeticOperation(10, 10); objb.fatherMethod(); System.out.println("c1 = "+objb.c1); } } class A{ int a1=10; int a2=100; public void arithmeticOperation(int x,int y){ System.out.println("x + y = "+ ( x + y)); } public void fatherMethod(){ System.out.println("调用父类A的方法:fatherMethod()"); } } class B extends A{ int a2=1000; int c1=10000; public void fatherMethod(){ System.out.println("调用子类B的方法:fatherMethod()"); } }