`
yajie
  • 浏览: 206871 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

java多态反射机制例子

阅读更多
  1. package  duotai;  
  2.   
  3. class  Customer{  
  4.     @SuppressWarnings ( "unused" )  
  5.     private  String account;  
  6.     @SuppressWarnings ( "unused" )  
  7.     private  String password;  
  8.     //有两个函数名称一样,但是系统可以接受,这叫做函数重载(静态多态性)   
  9.     //一个函数呈现为多种状态,系统能够根据参数来决定调用谁   
  10.     //三种情况:参数个数不同,参数个数相同类型不同,个数类型相同出现的顺序不同   
  11.     //静态是指:虽然函数名只有一个,但是要写代码要写多个   
  12.     public  Customer()  
  13.     {  
  14.         System.out.println("构造函数1" );  
  15.     }  
  16.       
  17.     public  Customer(String account, String password) {  
  18.         System.out.println("构造函数2" );  
  19.         this .account=account;  
  20.         this .password=password;  
  21.     }  
  22. }  
  23.   
  24.   
  25. public   class  CustomerTest {  
  26.     public   static   void  main(String[] args) {  
  27.         @SuppressWarnings ( "unused" )  
  28.         Customer cus1 = new  Customer(); //调用构造函数   
  29.         @SuppressWarnings ( "unused" )  
  30.         Customer cus2 = new  Customer( "3213" , "1213" ); //调用构造函数   
  31.     }  
  32.   
  33. }  

 

  1. package  duotai;  
  2.   
  3. //模块1调用一个对话框,让对话框显示出来   
  4.   
  5. class  Module1 {  
  6.     private  Dialog dialog;  
  7.   
  8.     public  Module1(Dialog dialog) {  
  9.         this .dialog = dialog;  
  10.     }  
  11.       
  12.     public   void  callDialog(){  
  13.         dialog.show();  
  14.     }  
  15.   
  16. }  
  17.   
  18. abstract   class  Dialog{  
  19.     public   abstract   void  show();  
  20. }  
  21. class  Dialog1  extends  Dialog {  
  22.     public   void  show() {  
  23.         System.out.println("对话框1显示" );  
  24.     }  
  25. }  
  26. //客户对Dialog1不满意想自己开发一个Dialog2,被Module1调用,不能改变Module1原代码   
  27.   
  28. class  Dialog2  extends  Dialog{  
  29.     public   void  show() {  
  30.         System.out.println("对话框2显示" );  
  31.     }  
  32. }  
  33.   
  34.   
  35. public   class  DaliogTest {  
  36.   
  37.     public   static   void  main(String[] args) {  
  38.           
  39.         Dialog1 dia = new  Dialog1();  
  40.         Module1 mod1 = new  Module1(dia);  
  41.           
  42.         mod1.callDialog();  
  43.     }  
  44.   
  45. }  

 

  1. package  duotai;  
  2.   
  3. //动态多态性一般在继承时使用   
  4. abstract   class  Person{  
  5.     public   abstract   void  printInfo();  
  6. }  
  7.   
  8. class  Student  extends  Person{  
  9.     public   void  printInfo() {  
  10.         System.out.println("学生打印" );  
  11.     }  
  12. }  
  13.   
  14. class  Teacher  extends  Person{  
  15.     public   void  printInfo() {  
  16.         System.out.println("老师打印" );  
  17.     }  
  18. }  
  19.   
  20. public   class  StudentTest {  
  21. /*  public static void print(Student stu) {  
  22.         stu.printInfo();  
  23.     }  
  24.  
  25.     public static void print(Teacher tea) {  
  26.         tea.printInfo();  
  27.     }*/   
  28.   public   static   void   print(Person p) { //父类的引用可以指向子类对象   
  29.     p.printInfo();  
  30. }  
  31.     public   static   void  main(String[] args) {  
  32.         print(new  Student());   
  33.     }  
  34.   
  35. }  

 

  1. package  fanshe;  
  2.   
  3.   
  4. public   class  Customer {  
  5.     private  String account;  
  6.     private  String password;  
  7.   
  8.     public  Customer() {  
  9.         System.out.println("构造函数1" );  
  10.     }  
  11.   
  12.     public  Customer(String account, String password) {  
  13.         System.out.println("构造函数2" );  
  14.         this .account = account;  
  15.         this .password = password;  
  16.     }  
  17.   
  18.     public   void  printInfo() {  
  19.         System.out.println("账号:"  + account +  "密码"  + password);  
  20.     }  
  21. }  

 

  1. package  fanshe;  
  2.   
  3. import  java.lang.reflect.Constructor;  
  4. import  java.lang.reflect.Method;  
  5.   
  6. public   class  Test1 {  
  7.     @SuppressWarnings ( "unchecked" )  
  8.     public   static   void  main(String[] args)  throws  Exception {  
  9.   
  10.         String className = "fanshe.Customer" ;  
  11.         // className cus = new className();   
  12.         // 得到类的信息   
  13.         Class c = Class.forName(className);  
  14.   
  15.         // 得到构造函数,就可以生成一个对象   
  16.         Constructor[] cons = c.getConstructors();  
  17.         for  ( int  i =  0 ; i < cons.length; i++) {  
  18.             String str = cons[i].getName();  
  19.             System.out.println("名字:"  + str);  
  20.               
  21.             Class[] params = cons[i].getParameterTypes();// 得到参数类型   
  22.             for  ( int  j =  0 ; j < params.length; j++) {  
  23.                 String name = params[j].getName();  
  24.                 System.out.println(name);  
  25.             }  
  26.         }  
  27.         //得到里面的成员函数(包括继承过来的),就可以调用成员函数   
  28.         Method[] met = c.getMethods();  
  29.         for  ( int  i =  0 ; i < met.length; i++) {  
  30.             String str = met[i].getName();  
  31.             System.out.println("名字:"  + str);  
  32.               
  33.             Class[] params = met[i].getParameterTypes();// 得到参数类型   
  34.             for  ( int  j =  0 ; j < params.length; j++) {  
  35.                 String name = params[j].getName();  
  36.                 System.out.println(name);  
  37.             }  
  38.         }  
  39.     }  
  40.   
  41. }  

 

  1. package  fanshe;  
  2.   
  3. import  java.lang.reflect.Constructor;  
  4. import  java.lang.reflect.Method;  
  5.   
  6. public   class  Test2 {  
  7.     @SuppressWarnings ( "unchecked" )  
  8.     public   static   void  main(String[] args)  throws  Exception {  
  9.         /*  
  10.          * 反射为配置文件改变模块行为提供了可能  
  11.          */   
  12.         String className = "fanshe.Customer" ;  
  13.         Class c = Class.forName(className);  
  14.         //c.newInstance();表示调用不带参数的构造函数   
  15.         // 生成一个对象:用构造函数   
  16.         Constructor con1 = c.getConstructor(new  Class[] {Class.forName( "java.lang.String" ),Class.forName( "java.lang.String" ) });  
  17.         //Constructor con1 = c.getConstructor(new Class[] {});// 得到不带参数的构造函数   
  18.       
  19.         // 生成对象   
  20.         Object obj = con1.newInstance(new  Object[] { "222" , "111" });  
  21.         //Object obj = con1.newInstance(new Object[] {});// 表示不传入参数   
  22.         //怎样调用obj里面的方法   
  23.         Method met = c.getMethod("printInfo" new  Class[]{}); //得到方法   
  24.         met.invoke(obj, new  Object[]{}); //调用   
  25.           
  26.         /*Customer cus = new Customer("222","111");  
  27.         cus.printInfo();*/   
  28.           
  29.     }  
  30.   
  31. }  
  32.   
  33.   
  34. /*public class Test2 {  
  35.     public static void main(String[] args) throws Exception {  
  36.         String className = "fanshe.Customer";  
  37.         Class c = Class.forName(className);  
  38.         Constructor con1 = c.getConstructor(new Class[] {Class.forName("java.lang.String"),Class.forName("java.lang.String") });  
  39.         Object obj = con1.newInstance(new Object[] {"222","111"});  
  40.         Method met = c.getMethod("printInfo", new Class[]{});  
  41.         met.invoke(obj, new Object[]{});  
  42.     }  
  43. }*/  
5
2
分享到:
评论

相关推荐

    Java SE编程入门教程 java反射机制(共16页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java封装继承多态(共56页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java判断循环(共79页).ppt

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java泛型(共11页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java序列化(共14页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java instanceof(共3页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java IO(共28页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java集合(共38页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java object(共9页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java正则(共8页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java线程(共61页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java异常(共57页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java GC(共6页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java数组(共33页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java接口(共21页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java Math(共11页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java包装器(共9页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java static final(共24页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java网络编程(共29页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

    Java SE编程入门教程 java设计模式(共17页).pptx

    Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程...

Global site tag (gtag.js) - Google Analytics