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. }   

相关内容