<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

向上转型
向下转型
定义
把对某个对象的引用视为对其基类引用的做法
将超类的引用强制转换为子类类型
作用
调用导出类中的覆盖方法

调用导出类中的扩展方法

 

代码:

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
左边的对象是否是右边的类的实例