JAVA多态(向上转型)与RTTI向下转型

来源:互联网 发布:java发展前景 编辑:程序博客网 时间:2024/05/17 16:03
多态


late-binding, 在编译前不确定 函数调用和哪个具体实现绑定

在程序运行期间,再决定函数调用和哪个具体实现绑定。

/* * polymorphism*/class S{public S(){out.println("S()");}public void common(){out.println("S common()");}}class Sub1 extends S{public Sub1(){out.println("Sub1()");}@Overridepublic void common(){out.println("Sub1 common()");}} class Sub2 extends S{public Sub2(){out.println("Sub2()");}@Overridepublic void common(){out.println("Sub2 common()");}}public class Poly {public static void main(String[] args){S[] slist = {new Sub1(),new Sub2(),new S()};for(int i=0; i<3; i++){            //未确定与哪个具体函数实现绑定slist[i].common(); }}}/*output:S()Sub1()S()Sub2()S()Sub1 common()Sub2 common()S common()*/

RTTI运行时刻向下转型

/* * polymorphism and RTTI(Runtime Type Identifier) * */class S{public S(){out.println("S()");}public void common(){out.println("S common()");}}class Sub1 extends S{public Sub1(){out.println("Sub1()");}@Overridepublic void common(){out.println("Sub1 common()");}} class Sub2 extends S{public Sub2(){out.println("Sub2()");}@Overridepublic void common(){out.println("Sub2 common()");}}public class Poly {public static void testPoly(){S[] slist = {new Sub1(),new Sub2(),new S()};for(int i=0; i<3; i++){slist[i].common();}}public static void testRtti(){S[] slist = {new Sub1(),new Sub2(),new S()};Sub1 sb1 = (Sub1)slist[0];//从父类转型至Sub1子类sb1.common();Sub2 sb2 = (Sub2)slist[1];//从父类转型至Sub2子类sb2.common();}public static void main(String[] args){testRtti();}}/*S()Sub1()S()Sub2()S()Sub1 common()Sub2 common()*/


0 0
原创粉丝点击