java 中如何实现 动态声明对象?

java中如何实现动态声明对象?我想做的是,当我遇到一个类(比如说是Object类或者任何其他父类),我要实现强转并且动态的声明一个引用去接收这个对象。例如:Animal... java 中如何实现 动态声明对象?
我想做的是,当我遇到一个类(比如说是Object 类或者任何其他父类),我要实现强转 并且动态的声明一个引用去接收这个对象。
例如:
Animal animal 的实际类型是 Dog,
(。。。强转之后)
Dog god=animal强转之后的实际对象;

这个Dog dog引用时动态实现的,也有可能是Cat ,monkey,或者其他的。

这要怎么实现呢?
展开
 我来答
a11e90
2014-05-07 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部

没太理解你要求的 实现但一般这种动态获取类信息 在java中都是通知反射机制实现的

Java的反射API(Reflection API)
Class类:要正确使用Java反射机制就得使用java.lang.Class这个类。它是Java反射机制的起源。当一个类被加载以后,Java虚拟机就会自动产生一个Class对象。通过这个

Class对象我们就能获得加载到虚拟机当中这个Class对象对应的方法、成员以及构造方法的声明和定义等信息。
 
反射API用于反应在当前Java虚拟机中的类、接口或者对象信息
功能:(Object object = new Object(),下面以对象object进行说明)
1)  获取类的Class对象
如果在运行时一个类的实例已经得到,你可以使用
Class c = 对象名.getClass();例: Class c = object.getClass();Class s = object.getSuperclass();
如果你在编译期知道类的名字,你可以使用如下的方法Class c =java. awt. Button.class; 或者Class c = Integer.TYPE;
如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法Class c = Class.forName(“类的全路径”);
2)  获取类的Fields ,对Field进行赋值
Field[] fus = object.getClass().getDeclaredField();
Field fu = object.getClass().getDeclaredField(fieldName);//获取对象object的名称为fieldName的属性域。
fu.setAccessible(true) ;//设置属性域的访问属性
fu.set(object,val); //设置object对象的属性值
3)  获取类的Method
Method[]  ms= object.getClass().getDeclaredMethods()
4)  获取类的Constructor
5)  新建类的实例
(A)通过Class<T>的函数newInstance
(B)通过Constructor对象的方法newInstance.
heganglaoda
推荐于2018-04-14 · TA获得超过204个赞
知道小有建树答主
回答量:179
采纳率:100%
帮助的人:172万
展开全部
Animl animal;// 由子类实例化
if(animal instanceofDog){
Dog dog = (Dog)animal;
}else if(animal instanceofCat){
Cat cat =(Cat)animal;
}
若还有子类一次判断,这是一种基本的办法
追问
有没有不需要判断的?直接根据类对象声明合适的引用
追答
没有,java本身是先编译再执行的,不会动态的改变声明的,即使封装的再好也少不了判断的逻辑,否则就是编译错误了,不过java中有多态,可以解决很多问题,其实你的那么多子类无非是具有不同的行为(函数实现)那么完全可以由多态来实现,如果子类含有独有的方法那么就只能强转了
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式