`
Messi光明
  • 浏览: 53426 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

java多态的理解

 
阅读更多
首先 我想说 这个程序不是我的 但是我觉得这个能很好的反应出JAVA的多态,使大家能更好的理解JAVA多态.对大家的学习有点帮助。由于是COPY过来的 就不要积分了哈哈 
希望大家能从中学到些什么。 class A ...{ 
         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...{}    
以下输出结果是什么?  
       A a1 = new A(); 
       A a2 = new B();  
       B b = new B();     
       C c = new C();     
       D d = new D();  
        System.out.println(a1.sho(b));   ①
         System.out.println(a1.sh(c));   ② 
        System.out.println(a1.sho(d));   ③
         System.out.println(a2.sh(b));   ④ 
        System.out.println(a2.sho(c));   ⑤
         System.out.println(a2.sh(d));   ⑥
         System.out.println(b.s(b));     ⑦ 
        System.out.println(b.sh(c));     ⑧
        System.out.println(b.show(d)); ⑨  
三)答案  

①   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 
    1 a1.shows(b),在A中没有含有B类参数的方法,但是含有A类参数的方法,根据子类对象父类可用的原则,所以调用方法 
     public String show(A obj)...{return ("A and A");}   
    2 a1.show(c),C类是B类的子类,而B类又是A类的子类,所以C类对象可以当制作A类对象使用。结果同上。  
    3 a1.show(d),根据参数类型直接调用A中的方法       public String show(D obj)...{                 return ("A and D");          }   
    4 a2.show(b),a2本来是一个B对象,但是将其赋给了A类变量,所以a2只保留了与父类A同名的属性和方法。a2.show(b)调用B类中的保留的与父类同名同参方法 
      public String show(A obj)...{                 return ("B and A");          }   
   5 a2.show(c),B类的保留方法中没有C类参数方法,但是有含有C的父类A的参数方法,所以调用的方法 
             public String show(A obj)...{                 return ("B and A");          }  
     6 a2.show(d),调用的是A类中的 
             public String show(D obj)...{                 return ("A and D");          }  
    7 b.show(b),调用B类中的 
             public String show(B obj)...{                 return ("B and B");          } 

    8 b.show(c),B类中没有C类参数的方法,但是有B类参数的方法,所以调用方法          public String show(B obj)...{                 return ("B and B");          } 
9 b.show(d),解释同8  
P.S. 关于6中是否有权限问题 请大家自己试试为什么不调用public String show(A obj) 而调用 public String show(D obj) 可能是D的权限比A大吧….(个人理解)
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics