概念:1.向上转型:子类对象----->父类对象(程序自动完成)
2.向下转型:父类对象----->子类对象(须明确指出)
例子:向上转型
class A{
public void fun1(){
System.out.println("A--->public void fun1() ");
}
public void fun2(){
this.fun1();
}
};
class B extends A{
public void fun1(){ //覆写父类中的fun1()
System.out.println("B--->public void fun1()");
}
public void fun3(){
System.out.println("B--->public void fun3()");
}
};
public class PolDemo{
public static void main(String args[]){
B b=new B();
A a=b; //向上转型,子类-->父类
a.fun1();
}
}
程序输出:B-->public void fun1()
结果:如果对象发生了向上转型,所调用的方法一定是被子类覆写过的方法。但是对象a是无法调用B类中的fun3(),因为父类中没有定义。
若想要调用子类自己的方法,则须使用子类的实例,于是可以将对象向下转型:
class A{
public void fun1(){
System.out.println("A---->public void fun1()")
}
public void fun2(){
this.fun1();
}
};
class B extends A{
public void fun1(){
System.out.println("B--->public void fun1()");
}
public void fun3(){
System.out.println("B--->public void fun3()");
}
}
public class PolDemo2{
public static void main(String [] args){
A a=new B(); //向上转型
B b=(B)a; //向下转型
b.fun1();
b.fun2();
b.fun3();
}
}
运行结果:B--->public void fun1()
B--->public void fun1() //调用父类的fun2(),fun2()调用fun1(),fun1()已被子类覆写,故输出子类的
B--->public void fun3()
注:对象发生向下转型前,必须首先发生对象向上转型