`
yajie
  • 浏览: 212977 次
  • 性别: 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反射机制

    Java反射机制是Java编程语言中的一个重要特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类集中在java.lang.reflect包下,包括Class、Constructor、Method和...

    java反射机制测试代码

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种能力使得Java代码能够具备高度的动态性,能够在不预先知道具体类的情况下,调用类的方法,访问字段,...

    java简单程序小例子

    总的来说,"java简单程序小例子"涵盖了Java编程的基础知识,包括语法、面向对象编程、异常处理、集合框架、多线程、I/O流和反射等核心概念,这些都是成为一名合格的Java开发者所必需掌握的技能。通过实践这些小例子...

    JAVA学习笔记和例子程序值得看看

    7. **反射**:反射机制允许在运行时动态获取类的信息并调用其方法,是Java的一个强大功能,常用于框架开发。 8. **泛型**:泛型提供了类型安全的容器,可以在编译时防止类型错误,提高代码的可读性和可维护性。 9....

    用java写的一些小例子

    "用java写的一些小例子"这个标题和描述暗示了我们将会探讨一些基础到进阶的Java编程示例。这些小例子通常用于教学目的,帮助初学者理解和掌握Java编程的核心概念。 在Java的学习过程中,我们可以从以下几个方面进行...

    Java教程例子 教程 例子

    Java教程例子教程例子 ...以上只是部分可能涵盖的Java知识点,实际例子中可能还涉及了更多的主题,如反射、注解、枚举、 Lambda表达式等。通过实践这些例子,学习者不仅可以加深理论理解,还能提高实际编程能力。

    100个Java经典例子后端- Java

    10. **反射机制**: 运行时动态加载类、获取类信息、创建对象和调用方法等,是Java提供的一种强大功能。 11. **泛型**: 提高代码的类型安全性,避免类型转换错误,如List、Map, String&gt;等。 12. **枚举**: Java中的...

    超级经典java例子,涉及到大部分java类库的使用

    2. **类与对象**:Java是面向对象的语言,因此例子会演示如何定义类、创建对象、使用构造函数、封装、继承和多态等概念。 3. **异常处理**:Java通过try-catch-finally结构进行异常处理,例子可能包括如何抛出和...

    Java2 实用教程(第五版)课本例子以及习题解答(耿祥义、张跃平编著)

    5. **多线程**:Java支持多线程编程,例子会解释如何创建和管理线程,以及同步机制如synchronized关键字和wait/notify方法。 6. **输入/输出流**:Java的I/O系统允许程序进行文件操作和网络通信。书中例子会演示...

    java基础部分详细例子

    此外,Java的IO流系统支持文件读写和网络通信,而反射机制允许运行时动态访问类的信息,创建对象并调用方法。枚举类型是Java特有的,用于定义固定数量的常量。Lambda表达式和Stream API是Java 8引入的新特性,它们...

    java编程100个例子

    2. **面向对象编程**:Java是一种纯面向对象的语言,例子中可能包含类的定义、对象的创建、封装、继承、多态等概念。通过实例,你可以理解类与对象的关系,以及如何利用这些特性设计和实现复杂的系统。 3. **异常...

    java学习150个经典的例子

    11. **反射机制**:Java的反射机制允许程序在运行时动态地获取类的信息并操作类的对象。通过例子,你可以学习如何使用Class类、Method类和Constructor类。 12. **泛型**:泛型提高了代码的安全性和可读性。实例会...

    java 150个小例子

    7. **反射**:反射是Java的一种高级特性,允许在运行时动态访问类的信息。这包括创建对象、调用方法、获取字段等。 8. **泛型**:泛型提供了类型安全的容器,防止了在集合中存储不兼容类型的对象。例子会展示泛型的...

    java小例子

    6. **异常处理**:Java使用异常处理机制来处理运行时错误,例子可能包含try-catch-finally结构。 7. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、LinkedList、HashSet、HashMap...

    JAVA的初学好好例子

    10. **反射**:Java反射机制允许程序在运行时检查和操作类、接口、字段和方法,这对于动态加载类、创建对象以及实现元编程等功能非常有用。 通过实践这些例子,你可以逐步熟悉Java语言的各个方面,并加深对编程思想...

    Java代码的例子全集

    8. **反射机制**:允许在运行时动态获取类的信息并操作其成员。 9. **泛型**:提高代码的类型安全性和重用性,避免强制类型转换。 10. **JDBC**:Java数据库连接,用于与各种数据库进行交互,执行SQL语句。 11. *...

    Java程序例子

    2. **类与对象**: Java的核心是面向对象编程,所以例子可能涉及类的定义、对象的创建、封装、继承、多态等概念。这有助于理解如何构建和使用自定义的数据结构。 3. **异常处理**: 例子可能会包含如何使用try-catch...

    java100例,java的经典例子

    这100个例子可能包括了以上所有或部分知识点,通过实践每个例子,学习者能更好地理解Java语言的特性和用途,从而提升编程技能。在学习过程中,一定要注意阅读源码、理解代码逻辑,并尝试自己动手编写和修改,这是...

    JAVA课件ppt非常详细带例子

    9. **反射与注解**:了解Java反射机制,如何在运行时获取类的信息并动态操作类、对象和方法。注解是元数据的一种形式,可以用于代码的元编程。 10. **泛型**:理解泛型的用途,如何在类、接口和方法中使用泛型来...

    Java基础的例子 练习题(著名的于慧峰老师的总结)

    10. **反射**:Java反射机制允许在运行时检查类、接口、字段和方法的信息,并动态调用方法、创建对象。这对于框架开发、元编程和插件系统非常有用。 以上就是"Java基础的例子 练习题"中涵盖的主要知识点。通过学习...

Global site tag (gtag.js) - Google Analytics