Java反射
2015-07-23 01:56
525 查看
小问题还是直接上代码比较直观
Parent类(父类)
Children类(Parent类的子类)
开始测试
下面是打印输出的结果:
Children:mehtod1
Parent:method1
Children:method2
这能说明什么?表示我对此并不感到很惊讶!!
【注:对此表示惊讶的同学得回去看看java基础了】
别急,好戏开始了,现在我对输出有点不满,我要下面这个!
Children:mehtod1
Parent:method1
Children:method3
【注:简单说就是在执行Parent类的method1后回来执行Children类的method3方法,怎么办?】
方法一?
重写Parent类的method1方法
纳里,编译都过不了。。。。。。
编译过不了是必然的,因为这里只能调用在父类中声明的方法:method1()和method2(),而method3()是子类特有的,父类里面“看不到”,所以这里会编译出错!
但是,我们发现一个问题,程序运行起来后,这里的this明明就是子类对象啊!这可真是干着急啊,到嘴的肥肉竟然不能吃。办法当然是有的,现在进入正题。
既然问题的关键已经找到了,就是这个this搞的鬼。我们直接上代码。
方法二:
重写父类的method1方法:
下面是打印输出的结果:
Children:mehtod1
Parent:method1
Children:method3
正题结束,这回真的就是指哪打哪了,加了几行代码就搞定了,收工。
Parent类(父类)
package com.xiongyu.reflect; public class Parent { public void method1() { System.out.println("Parent:method1"); this.method2(); } public void method2() { System.out.println("Parent:method2"); } }
Children类(Parent类的子类)
package com.xiongyu.reflect; public class Children extends Parent { public void method1() { System.out.println("Children:mehtod1"); super.method1(); } public void method2() { System.out.println("Children:method2"); } public void method3() { System.out.println("Children:method3"); } }
开始测试
package com.xiongyu.reflect; public class Test_Main { public static void main(String[] args) { Parent p = new Children(); p.method1(); } }
下面是打印输出的结果:
Children:mehtod1
Parent:method1
Children:method2
这能说明什么?表示我对此并不感到很惊讶!!
【注:对此表示惊讶的同学得回去看看java基础了】
别急,好戏开始了,现在我对输出有点不满,我要下面这个!
Children:mehtod1
Parent:method1
Children:method3
【注:简单说就是在执行Parent类的method1后回来执行Children类的method3方法,怎么办?】
方法一?
重写Parent类的method1方法
public void method1() { System.out.println("Parent:method1"); this.method3(); }
纳里,编译都过不了。。。。。。
编译过不了是必然的,因为这里只能调用在父类中声明的方法:method1()和method2(),而method3()是子类特有的,父类里面“看不到”,所以这里会编译出错!
但是,我们发现一个问题,程序运行起来后,这里的this明明就是子类对象啊!这可真是干着急啊,到嘴的肥肉竟然不能吃。办法当然是有的,现在进入正题。
既然问题的关键已经找到了,就是这个this搞的鬼。我们直接上代码。
方法二:
重写父类的method1方法:
public void method1() { System.out.println("Parent:method1"); try { Method method = this.getClass().getDeclaredMethod("method3", null); method.invoke(this, null); } catch (Exception e){ e.printStackTrace(); } }
下面是打印输出的结果:
Children:mehtod1
Parent:method1
Children:method3
正题结束,这回真的就是指哪打哪了,加了几行代码就搞定了,收工。
相关文章推荐
- HDU 1707 Spring-outing Decision
- hadoop2.6.0的eclipse插件安装
- Java_流的操作规律(技巧)
- java设计模式,观察者模式与awt 和模拟awt
- java 设计模式 观察者模式
- java 7 新特性/switch/枚举类型/二进制/字面量
- Inside the Java Virtual Machine 读书笔记一
- eclipse打不开闪退解决方式
- Ant编译java项目时无法导入rt.jar中的类
- 对Java中线程的深入探讨
- 在eclipse中调试运行springside4 showcase
- 100个高质量Java开发者博客
- 表达树构造(java)
- java多线程编程(一)
- MyEclipse10.7使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境
- 7月22日本人正在学习Java每天所学晚上都会在博客更新,如果错了可以在评论指出。
- Java并发编程:volatile关键字解析
- spring(12) Spring的通过工厂方法配置Bean
- java常用类源代码探究(二):装箱类
- Java学习01