- 浏览: 231809 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (165)
- Java基础 (49)
- 开发工具 (3)
- Python基础 (1)
- Oracle基础 (9)
- Java 符号计算 (0)
- 计算机基本原理 (10)
- SQL (6)
- javascript (16)
- HTML (2)
- XML (4)
- 程序员之路 (7)
- JDBC (1)
- Unicode (0)
- 字符编码 (3)
- JSP基础 (2)
- Servlet&JSP (9)
- MySQL基础 (1)
- UML基础 (1)
- Hibernate (2)
- Java包 (1)
- Spring (1)
- Struts2 (9)
- 系统命令 (1)
- Tomcat (1)
- Windows (1)
- Android (1)
- C#基础 (14)
- HTML5 (1)
- .NET基础 (1)
- 数据库基础 (2)
- ASP.NET基础 (7)
- 开源Java (3)
- 趣味算法 (1)
- 面向对象思想 (1)
- 软件应用 (1)
- Web工程 (1)
- jquery (2)
- JPA (0)
- 设计模式 (0)
最新评论
-
静夜独窗:
JavaBean组件能说的具体一点吗,我感觉这样说理解的不清晰 ...
EL 表达式语言 -
静夜独窗:
在Java中,不同字符集编码的转换是通过Unicode作为中介 ...
JavaWeb中的乱码产生与解决方案
先自定义一对父类与子类
public class A_For_Reflect_Instance_and_Polymorphism { private int my_field=0; public void my_method(){ System.out.println("这是A的方法"); } }
public class AA_For_Reflect_Instance_and_Polymorphism extends A_For_Reflect_Instance_and_Polymorphism { public void my_method(){ System.out.println("这是AA的方法"); } public void not_in_A_method(){ System.out.println("这是AA的方法.A中没有这个方法"); } }
A_For_Reflect_Instance_and_Polymorphism 以下简称A。
AA_For_Reflect_Instance_and_Polymorphism以下简称AA。
对于多态的普通展示一般有:
A a=new AA();//a的编译时为A。a的运行运行时为AA。a只能使用A中的方法。但实际使用却是AA中继承与重写的方法。 a.my_method();//调用AA中的方法。 a.not_in_A_method();//无法通过编译。
以上理所当然。
我的疑问来自看到有些人用反射时是这样的。
Class c_a=Class.forName("A"); A a=(A)c_a.newInstance();
使用强转来确定a对象。这让我很不爽。因为我觉得这样强转就失去了Java反射的动态意义了。
于是乎就想直接用Object自然的接收newInstance()方法所返回的Object对象。
Class c_a=Class.forName("A"); Object obj=obj.newInstance();
但是这样会不会受到编译时类是Object的限制。导致我非Object的方法便不能用了?
如果这样
obj.my_method();
确实无法使用。编译无法通过。
但是使用反射。便可以调用。
Method method1=c_a.getMethod("my_method"); method1.invoke(obj);
这样利用Java反射实现动态语言的一些特性便可以实现。只是这代码写起来实在是太冗长了。
另外需要说明一下,方法getClass()所得到的是对象运行时类的Class。
Object obj=new A(); System.out.println(obj.getClass()); //所得到的结果为 // class A
下面是我实验中的执行代码。
import java.lang.reflect.Method; public class Reflect_Instance_and_Polymorphism { public static void main(String[] args) throws Exception { //普通多态 A_For_Reflect_Instance_and_Polymorphism a_obj=new AA_For_Reflect_Instance_and_Polymorphism(); a_obj.my_method(); System.out.println(); //反射多态 测试 Class c=a_obj.getClass(); System.out.println("obj.getClass返回的类为"+c+"此为运行时类"); Object obj=c.newInstance();//实例化 try{ //obj.my_method(); }catch(Exception e){ }finally{ System.out.println("obj在编译时是Object的。obj无法调用my_method。"); } System.out.println(); System.out.println("用反射调用对象的方法"); Method method1=c.getMethod("my_method"); method1.invoke(obj); System.out.println("用反射即调用运行时方法"); Method method2=c.getMethod("not_in_A_method"); method2.invoke(obj); System.out.println("反射调用的方法无视编译时。所调用的方法取决于Class对象所对应的类。"); } }
发表评论
-
Java NIO 基础学习
2013-09-21 16:24 869零、概述 1、传统IO的问题 2、非阻塞IO ... -
try finally 与 return
2013-09-02 16:11 9131、try、catch、finally语句中,在如果try ... -
Java的传值
2013-07-21 13:06 909这个问题一直以来都有误区。本质原因是那些写书的人,喜欢用“传 ... -
Java多线程——synchronized的问题
2013-06-14 15:51 1009一直以来都存在这样的问题: 多线程操作同一对象。该对象有 ... -
Java与操作系统的交互
2013-05-05 22:08 1681System类 System表示Java程序的运行平台。S ... -
java枚举
2013-04-06 15:59 857枚举,之前一直忽视了其存在。其实挺有用。 java5 ... -
Java语法细节
2013-02-03 11:19 892final关键字 final修饰的量以视为常量,当fin ... -
Java Socket 学习笔记
2013-01-29 23:42 919Socket:英文中的意思是插座。 两个Java应用程序 ... -
Java 线程同步
2013-01-27 23:17 1005理解Java线程状态: ... -
Java 与 C# 计算性能比较
2012-11-02 14:51 1110程序:寻找2亿以内的最大素数,从2开始寻找。 Java程序: ... -
Java数组的操作
2012-10-12 11:23 814一、复制数组 java.lang.System类中的静态 ... -
Java容器
2012-10-09 00:33 855Java集合类就像容器。把多个对象的引用放进容器中。即集合类主 ... -
Java日期处理
2013-01-31 23:05 819不得不吐槽一下Java的日期处理。太不爽了。 基本 ... -
java:Excel
2012-09-27 09:06 1097jxl操作excel 在开源世界中,有两套比较有影响的API ... -
关于分页显示的页码
2012-08-21 13:30 1225分页显示数据时常常需要将页码列出来。 此处的Page类主要关 ... -
dom4j
2012-07-07 17:21 2205dom4j 与JDOM一样,也是一种用于解析XML文档 ... -
JDOM基础
2012-07-07 17:20 1915JDOM Java Document Object Mode ... -
线程优先级 && 后台线程 && join线程
2012-07-02 23:08 46线程优先级 每个线 ... -
Java线程的运行状态(线程的生命周期)
2012-07-02 22:56 867新建和就绪 ... -
Java多线程 Thread类 和 Runnable接口
2012-07-02 22:13 1488Java的线程,即一个Thre ...
相关推荐
逐一针对继承、多接口、反射以及几种混合使用中的多态比较 来显示各自的优缺点。 博客文源代码存档
java反射机制测试代码 反射获取private类型的属性,方法,构造器 利用反射,多态实现动态编译
文章目录背景方案枚举接口实现多态总结 背景 工作中经常会有一些swich case或者if else的情况。一般这种情况一开始可能只有几个,但是几次迭代之后可能就会有非常多。...这个问题不难,关键解决方案就是多态+反射。多
文章目录1 类、对象/实例、实例化2 三大特性1)继承2)封装3)多态4)super方法5)类中的三个装饰器(内置函数)6)反射7)一些内置的魔术方法3 补充1)内置数据结构2)非(python)内置数据结构3)抽象类实例 ...
看懂这个你需要具备以下技能:对java反射和多态的理解,熟悉Dom4j的XML的操作,一点点设计模式思想,至少知道单子模式,Properties有了解.基本上struts的功能都有,有兴趣你可以扩展,比如异常处理,action优化。运行...
实现多态性行为的方法有以下几种:后期绑定,,多接口,反射,继承.后期绑定实际上是以降低性能和编程的便利性为代价来实现纯多态性的。通过多接口和继承实现多态性,性能更好,编程也更容易。通过反射,我们既可以使用...
通过Java的反射及ServerScoket 模拟 Tomcat 的例子 只要继承 TomLet 类似 HttpServlet 就可以实现自己的业务类 用了 反射及多态方式 主要用于教学和自学, 对 Tomcat 基本工作远离有个基本的理解
在制品
Java SE编程入门教程 collection与collections(共7页).pptx Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE...
多态,顾名思义就是多种状态的意思。简单来说就是同一个接口使用不同的实例来执行不同操作抽象一点:猫和狗都会叫,但是它们叫的声音不一样。 多态的存在必须满足一下条件: 继承(extends或implements) 重写...
将classpath路径下的配置文件加载进properties集合,并实现Student接口,多态形式,提高程序的可维护性
函数编程与OOP的主要区别就是OOP可以使程序更加容易扩展和易更改。 OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述 使用面向对象编程的原因一方面是因为它可以使程序维护和扩展变得更简单,...
Java中的多态是如何实现的? 多态在Java中是通过继承和接口来实现的。继承允许子类继承父类的方法和属性,同时可以重写父类的方法,从而实现多态。接口则允许不同的类通过实现同一个接口来达到多态的效果。 Java中...
技能树网络协议数据结构与算法红黑树语言参考面向对象魔术方法继承与多态面向接口反射异常和错误处理正则表达式流行框架PHP 扩展开发缓存详解代码调试与测试PHP 编
Java中的String是可变字符串还是不可变字符串? 答:String是不可变字符串,一旦创建就不可更改。 Java中的四种访问修饰符分别是什么,并描述其作用? 答:四种访问修饰符分别是...反射的作用是增强代码的灵活性和
反射机制:Class、Field、Method、Constructor等 注解:自定义注解、注解的应用等 数据库操作:JDBC、ORM框架、连接池等 常用的框架:Spring、SpringMVC、MyBatis、Hibernate等 分布式相关技术:Dubbo、Zookeeper、...
全书共17章,内容包括流程控制语句、类与对象 、继承与多态、委托与事件、数组与集合、泛型、反射、字符串操作、文件与流、多线程编程、Windows窗体与控件设计、数据库编程、网络通信编程、异步编程等。本书的代码...
Java中的多态有哪些实现方式? 什么是抽象类?Java中的抽象类有哪些特点? 什么是接口?Java中的接口有哪些特点? 什么是泛型?Java中的泛型有哪些特点? 什么是反射?Java中的反射有哪些应用场景? 什么是异常?...
Java SE编程入门教程 collection与collections(共7页).pptx Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE...