社区
Java SE
帖子详情
如何通过Class对象进行向下转型?或者其他方法实现也可以。
fankobe
2006-04-30 01:39:48
如果我运行时创建了一个类,不过创建的时候就已经把它向上转型为Object了。
不过后来我想把它向下转为它本来的类型,应该怎样做?
最好可以说说使用Class对象的方法。
当然其他的方法也可以接受。
不要问我为什么这样做。我只是想知道怎样可以运行时转型为本来的类型。
谢谢!
...全文
594
28
打赏
收藏
如何通过Class对象进行向下转型?或者其他方法实现也可以。
如果我运行时创建了一个类,不过创建的时候就已经把它向上转型为Object了。 不过后来我想把它向下转为它本来的类型,应该怎样做? 最好可以说说使用Class对象的方法。 当然其他的方法也可以接受。 不要问我为什么这样做。我只是想知道怎样可以运行时转型为本来的类型。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
pauliuyou
2006-05-22
打赏
举报
回复
直接就用Class.forName("className").newInstance()得到一个Object 然后再得到这个Object的Class对象,就可以获取这个Class的方法和变量. 方法可以用Method.invoke(..)调用. 有了Classs就可以随心所欲. 看JDK文档获取更多信息
禽兽v5
2006-05-19
打赏
举报
回复
oo语言和现实是很接近的,想想现实中的例子,你不用具体特征能分出不同地区的人吗?
fankobe
2006-05-18
打赏
举报
回复
to cm4ever(单细胞生物,亩产三万斤) :
请问你是那里明白了向下转换只能是强制而不能动态的?
确实如你所说,我没有清楚的了解OO概念。因为我是一个程序的初学者。OO以后才找个时候专门学习。
真的只能强制转换而不能动态吗?
为什么呢?
请大家发表一下意见,谢谢!
禽兽v5
2006-05-18
打赏
举报
回复
向下转换当然只能强制指定而不能动态,
只能说楼主没理解oo的概念。
crazycy
2006-05-17
打赏
举报
回复
强制类型转换
fankobe
2006-05-17
打赏
举报
回复
insiku(㊣瀟湘夜雨㊣)
写个程序来看看。
得到类型倒是容易,只是我想知道如果转换成这个类型。总不能每个类型都判断,然后转换吧。
insiku
2006-05-17
打赏
举报
回复
比如说覆写toString()
toString()返还对象类别
然后object调用toString()来获得对象类别 转换
我试试看
insiku
2006-05-17
打赏
举报
回复
能否在你的对象中建立方法 a()
方法A保存对象的类别 比如说用String
然后在object中调用a()来获得对象类别 然后转换
以上纯属猜想
fankobe
2006-05-17
打赏
举报
回复
倒,不是叫你们分析我的程序……
是分析问题
我的程序当然不是动态创建对象的。
做鸡真好吃
2006-05-10
打赏
举报
回复
en~
hero222
2006-05-10
打赏
举报
回复
從樓主的程序來看
應該無法add其他類的對象,我認為
因為已經進行判斷了
if((li.get(0).getClass().isInstance(o)))//判斷第一個對象的類是否和新增加的類一樣
我的理解,對嗎?
如果錯了,請指正
fankobe
2006-05-10
打赏
举报
回复
To vintager4(泥巴) :
你编写的程序是根据第一个放入的对象类型来确定以后只能放入同一种对象的方法吧?
谢谢。
这是一个前提,我想知道的是然后取出后然后转型。
给一个例如:
import java.lang.*;
import java.util.*;
public class staticCollection{
private List li=new ArrayList();
private boolean hasMenber =false;//是否已有第一对象的标志
public void add(Object o){
if(hasMenber){
if((li.get(0).getClass().isInstance(o)))
li.add(o);
else System.out.println("you can't add this object!!");
}
else {li.add(o);
hasMenber=true;
}
}
public static void main(String[] args){
staticCollection sc=new staticCollection();
sc.add("String");
sc.add("String2");
//sc.add(new Integer(1));//运行错误,
//因为第一次放入对象已经决定了类型
//问题来了,如果我现在想使用String的特有方法charAt()
//当然要先把它转型才可以用啊,想这样(String)加前缀直接转型
//但是需要考虑的是,你不知道放入的是String类呢?怎么办?
//如果到运行时才动态放入对象到StaticCollection中,那么我们
//有可以能不会知道他放入是什么类型的对象的,确实有这种可能。
//总不能通过instanceof来判断吧,可是有成千上万的类啊!!
//那么我现在想向下转型回原来的对象使用特有的方法,该怎么办?
}
}
希望大家继续支持~~
realdreamer
2006-05-08
打赏
举报
回复
向下转换当然是要知道本来的类型,是为了个别处理, 向上转换就用不着知道,那是为了统一处理了.
vintager4
2006-05-08
打赏
举报
回复
import java.util.*;
public class test3 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成方法存根
ArrayList l=new ArrayList();
String s="this is a String";
l.add(s);
Class c=l.get(0).getClass();
String s1="this ia another String";
Double d=new Double(10);
if(s1.getClass() == c) {
l.add(s1);
}
if(d.getClass() == c) {
l.add(s1);
}
System.out.println(l);
}
}
是不是这个意思啊?
hanjienihao1
2006-05-08
打赏
举报
回复
我能明白楼主的意思,以前也考虑过,不过不知道答案,帮你顶一下!
我认为程序肯定知道向上转型后的对象本来是什么类型。否则哪里来的多态.系统就是知道他原来是什么类型。不知道我说得对不对?
fankobe
2006-05-03
打赏
举报
回复
楼上的,我想问那该如何在运行时把它转换成本来的类型?
mingr6370
2006-05-03
打赏
举报
回复
有一种不好的写法,你可以试试
if( o instanceof Object ) {
//do sth
}
禽兽v5
2006-05-02
打赏
举报
回复
程序当然不知道.
所以你只能在运行时把一个类向上转换(up cast)成他的父类/父接口,调用父类的方法.
这就是为什么要设计成继承体系的原因.
fankobe
2006-05-02
打赏
举报
回复
不是楼上的意思,楼上的根本没有类型转换,而且d的类型本来就知道了,就是Date。
我讨论的是运行时才创建一个对象。
dfchjk
2006-05-01
打赏
举报
回复
Date d=new Date();
System.out.println(d.getClass().getName());//不知道是不是这个意思
C:\ww>java test
java.util.Date
加载更多回复(8)
Java
对象
类型转换:向上转型和
向下转型
向上转型 父类引用指向子类
对象
称为向上转型 其实就是把子类
对象
直接赋给父类引用,不用
进行
强制转换。 使用向上转型可以调用父类类型中的所有成员,在
进行
编译时会
进行
静态绑定,
对象
与指定的类型
进行
方法
绑定 调用某个
方法
,究竟执行哪一段
方法
,要看这个引用指向的是父类还是子类
对象
,这个过程是在运行时决定的,因此称为 动态绑定。
向下转型
与向上转型相反,子类
对象
指向父类引用就是
向下转型
向下转型
可以是调用子类类型中的所有成员,不过需要注意的是如果父类引用
对象
指向的是子类
对象
,那么在
向下转型
的过程的过程中
对象
转型--向上转型和
向下转型
对象
向上转型是自动的,学生(
对象
)一定是一个人(
对象
),因此Person
对象
指向 Student
对象
,这种情况是向上转型,由Java系统自动完成。instanceof 的具体作用是测试左边的
对象
是否是右边类或者该类的子类创建的
对象
,是,则返回true,不是,则返回false。该转型具有不确定性,转型前需要
进行
类型判断,如果被转换
对象
类型是目标类型,
进行
强制转换,否则不
进行
强制转换。Java通过
对象
转型
实现
对象
多态性,
对象
转型是指两个
对象
不属于同一类型(不同类),但相互之间可以转换。
Java
向下转型
的几种
方法
Java
向下转型
的几种
方法
众说周知:Java可以自动向上转型,子
对象
赋值给父类型,直接可以操作。但是
向下转型
如何处理呢? 使用场景:对引用的sdk中的API类型
进行
二次封装,回调接口类型二次封装。说明:这里面的接口不局限对应于Java中的interface,也可以是
class
。 一、
方法
汇总: 1. 静态代理 优点:直观简单 缺点:需要对使用的函数接口逐个复制编码 2. 动态jdk...
Java
对象
向上转型和
向下转型
向上转型(隐式) 向上转型——用父类的引用变量去引用子类的实例(或者说子类
对象
给父类引用变量赋值),这是允许的。 向上转型之后,父类引用变量只能调用父类中的属性和
方法
,不能访问子类独有的属性和
方法
。如果父类访问的
方法
是子类重写的
方法
,则访问重写之后的
方法
。 要求:在发生直接(间接)的继承(
实现
关系)的时候,才可以发生向上转型。
class
Animal { public void move() { System.out.println("移动"); } public void soun
Java 面向
对象
编程(三)——多态,
方法
重写,向上转型,
向下转型
文章目录多态向上转型向上转型代码示例
方法
重载和
方法
重写重写发生条件@Override注解
方法
重载和
方法
重写钟总结向上转型发生的时机
向下转型
**
向下转型
定义
方法
**
向下转型
发生条件instanceof关键字 多态 定义:面向
对象
三大特征最核心的特性,一个引用可以表现出多种行为/特性。->多态性 向上转型: 最大的意义在于参数统一化,降低使用者的使用难度!! Dog dog = new dog(); //类名称 类引用 = new 该类
对象
(); Animal animal = new Dog();
Java SE
62,628
社区成员
307,261
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章