首页 电脑 电脑学堂 查看内容

java多态讲解

2015-3-4 11:39 688 0

摘要: JAVA多态 一、相关的类结构 [java] view plaincopyclass A ...{  //create by ...
关键词: nbsp show println System 运行 方法 编译器 对象 return public

JAVA多态 一、相关的类结构 [java] view plaincopyclass A ...{  //create by danielinbiti           public String show(D obj)...{                    return ("A and D");             }              public String show(A obj)...{                    return ("A and A");             }     }     class B extends A...{             public String show(B obj)...{                    return ("B and B");             }             public String show(A obj)...{                    return ("B and A");             }     }    class C extends B...{}                                                                    class D extends B...{}   二、测试运行 [java] view plaincopyA a1 = new A();    A a2 = new B();    B b = new B();    C c = new C();     D d = new D();     System.out.println(a1.show(b));   ①    System.out.println(a1.show(c));   ②    System.out.println(a1.show(d));   ③    System.out.println(a2.show(b));   ④    System.out.println(a2.show(c));   ⑤    System.out.println(a2.show(d));   ⑥    System.out.println(b.show(b));    ⑦    System.out.println(b.show(c));    ⑧    System.out.println(b.show(d));    ⑨  三、运行结果 [java] view plaincopy①   A and A  ②   A and A  ③   A and D  ④   B and A  ⑤   B and A  ⑥   A and D  ⑦   B and B  ⑧   B and B  ⑨   A and D   四、总结 以A a2=new B()为例。 1、a2只能访问A的信息(指的是编译期编译器只知道a2是A类型,不知道a2具体子类对象,只有运行期才知道指向什么对象),而子类重写的方法, 父类中也存在,即B重写的方法,A里也有(如果B里有但是A里没有的方法,a2也不能直接调用),所以a2可以访问,但是调用的时候(注意这里指的是运行 期),a2实际指向的是B对象,所以调用的是B对象的同名同类型参数方法。所以a2.show(b)调用的是show(A obj),因为A引用不到show(B obj)。 注:编译期是编译器检查语法和类型,运行期是解析器解析伪代码为机器指令而执行,编译期编译器会检查a2的访问范围,也就是a2的访问不超过A的信息就不会出错,运行期解析器会解析方法的代码指令。
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部