Java多态(利用向上向下转型和反射机理)

Java多态(利用向上向下转型和反射机理)

  1.     //基类:     
  2.     public class Polymorphism {    
  3.         public int book=6;    
  4.         public void base(){    
  5.             System.out.println("父类的普通方法");    
  6.         }    
  7.         public void test(){    
  8.             System.out.println("父类的被覆盖的方法");    
  9.         }    
  10.         
  11.     }    
  12.     //子类     
  13.         
  14.     import java.lang.reflect.InvocationTargetException;    
  15.     import java.lang.reflect.Method;    
  16.         
  17.     public class SubClass extends Polymorphism {    
  18.         
  19.         public String book="子类的book";    
  20.             
  21.         @Override    
  22.         public void test() {    
  23.         System.out.println("子类的覆盖父类的方法");    
  24.         }    
  25.         public void sub(){    
  26.             System.out.println("子类特有的独特方法");    
  27.         }    
  28.         
  29.         public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {    
  30.                 
  31.             Polymorphism bs=new Polymorphism();    
  32.             System.out.println(bs.book);    
  33.             bs.base();    
  34.             bs.test();    
  35.             SubClass sc=new SubClass();    
  36.          //通过引用变量来访问其包含的实例属性时,系统总是试图访问它编译时类所定义的属性,而不是它运行时类所定义的属性     
  37.   
  38.         System.out.println(sc.book);  
  39.   
  40.          sc.test();    
  41.       sc.base();     
  42.      sc.sub();  
  43.   
  44.         Polymorphism py=new SubClass();   
  45.        System.out.println(py.book);    
  46.       py.base();  
  47.  py.test();   
  48.        //利用向下转型可以访问子类特有方法     
  49.       SubClass ss=(SubClass)py;    
  50.       ss.sub();     
  51.      //利用反射也可以     
  52.      Method[] cla=py.getClass().getMethods();  
  53.  int i=1;   
  54.      for(Method mth:cla){    
  55.         System.out.println(i+":");    
  56.         System.out.println(mth.toString()+":"+mth.getName());//省略    
  57.          if(mth.getName()=="sub"){         
  58.        System.out.println("*********");        
  59.         mth.invoke(py, null);//执行子类特有的方法体      
  60.            break;         
  61.    }          
  62.   i++;     
  63.             }  
  64.  }  
  65. }   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值