首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java多态反照机制例子

2012-10-06 
java多态反射机制例子package?duotai????class?Customer{??????@SuppressWarnings(unused)??????privat

java多态反射机制例子

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

?

view plain
  1. package?duotai;????
  2. //模块1调用一个对话框,让对话框显示出来????
  3. class?Module1?{??????private?Dialog?dialog;??
  4. ??????public?Module1(Dialog?dialog)?{??
  5. ????????this.dialog?=?dialog;??????}??
  6. ??????????public?void?callDialog(){??
  7. ????????dialog.show();??????}??
  8. ??}??
  9. ??abstract?class?Dialog{??
  10. ????public?abstract?void?show();??}??
  11. class?Dialog1?extends?Dialog?{??????public?void?show()?{??
  12. ????????System.out.println("对话框1显示");??????}??
  13. }??//客户对Dialog1不满意想自己开发一个Dialog2,被Module1调用,不能改变Module1原代码??
  14. ??class?Dialog2?extends?Dialog{??
  15. ????public?void?show()?{??????????System.out.println("对话框2显示");??
  16. ????}??}??
  17. ????
  18. public?class?DaliogTest?{????
  19. ????public?static?void?main(String[]?args)?{????????????
  20. ????????Dialog1?dia?=?new?Dialog1();??????????Module1?mod1?=?new?Module1(dia);??
  21. ??????????????????mod1.callDialog();??
  22. ????}????
  23. }??

?

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

?

view plain
  1. package?fanshe;????
  2. ??public?class?Customer?{??
  3. ????private?String?account;??????private?String?password;??
  4. ??????public?Customer()?{??
  5. ????????System.out.println("构造函数1");??????}??
  6. ??????public?Customer(String?account,?String?password)?{??
  7. ????????System.out.println("构造函数2");??????????this.account?=?account;??
  8. ????????this.password?=?password;??????}??
  9. ??????public?void?printInfo()?{??
  10. ????????System.out.println("账号:"?+?account?+?"密码"?+?password);??????}??
  11. }??

?

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

?

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

热点排行