向上转型
向下转型
定义
把对某个对象的引用视为对其基类引用的做法
将超类的引用强制转换为子类类型
作用
调用导出类中的覆盖方法
调用导出类中的扩展方法
 
代码:
public class TestUpCastingOrDownCasting{
       public static void main(String[] args){
              father[] f = {new father(),new son1(),new son2(),new gs()};
             
              for(int i=0; i< f.length; i++){
                     System.out.println("==============" + f[i] + "==============");
                     if(f[i] instanceof son2){
                            son2 s2 = (son2)f[i];
                            s2.s();
                     }
                     f[i].f();
              }
       }
}
 
class father{
       public void f(){
              System.out.println("父类的方法!");
       }
}
 
class son1 extends father{
       public void f(){
              System.out.println("儿子1继承父类的方法!");
       }
       public void s(){
              System.out.println("儿子1的方法!");
       }
}
 
class son2 extends father{
       public void f(){
              System.out.println("儿子2继承父类的方法!");
       }
       public void s(){
              System.out.println("儿子2的方法!");
       }
}
 
class gs extends son2{
       public void f(){
              System.out.println("孙子通过儿子2继承父类的方法!");
       }
       public void s(){
              System.out.println("孙子继承儿子2的方法!");
       }
       public void gs(){
              System.out.println("孙子的方法!");
       }
}
输出结果:
==========father@bdb503==========
父类的方法!
==========son1@b6e39f==========
儿子1继承父类的方法!
==========son2@119dc16==========
儿子2的方法!
儿子2继承父类的方法!
==========gs@c05d3b==========
孙子继承儿子2的方法!
孙子通过儿子2继承父类的方法!
执行语句:
==========father@bdb503==========
father f = new father();
f.f();
===对父类的操作
==========son1@b6e39f==========
father f = new son1();
f.f();
==向上转型,覆盖父类的方法
==========son2@119dc16==========
father f = new son2();
son2 s2 = (son2)f; ==向下转型
s2.s();
f.f();  ==向上转型
==========gs@c05d3b==========
father f = new son2();
son2 s2 = (son2)f;
s2.s();
f.f();
gs@c05d3b理解:
father f = new son2();
son2 s2 = (son2)f;
s2.s();
==执行语句过程中实现了一次向上转型son2 s2 = (son2)f;和向下转型s2.s();
f.f();
==实现的是向下转型
     f[i] instanceof son2: 判断instanceof左边的对象是否是右边的类的实例