子类转换成父类方法不丢失么?

lazyfox 2012-03-29 10:47:33
最近在淘宝上花了15元大洋买了本java编程思想,对其中的转换很不理解。

子类继承了父类,那么子类也扩展了一些父类所没有的方法。当子类转换成父类的时候,一些方法应该丢失了啊。为什么还能转换回来呢?

例如Object类,它只有那么多方法。而ArrayList类则是继承了Object类。

ArrayList a = new ArrayList();
...
Object obj = (Object)a;

当转换成obj的时候,a的一些ArrayList方法应该都没有了啊。

为什么转回来之后,例如ArrayList b=(ArrayList)obj;

b没有丢失任何方法?

谢谢大家咯~
...全文
751 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanmouren1hao 2012-09-01
  • 打赏
  • 举报
回复
理解了。。
引用
lazyfox 2012-03-30
  • 打赏
  • 举报
回复
谢谢大家的回答啊。感觉理解了

所谓强制转型

你没有改变对象
只是改变了引用而已

看来我对引用不太了解
再次谢谢大家~
dnsel 2012-03-30
  • 打赏
  • 举报
回复
LS正解
sunyiz 2012-03-30
  • 打赏
  • 举报
回复
所谓强制转型

你没有改变对象
只是改变了引用而已

父类引用不能访问子类方法
所以当你用父类引用指向子类对象时,不能访问子类的方法
而当你转回子类引用指向子类对象时,又可以访问子类方法了

记住,这个过程中对象一直没变过,一直都是那个子类对象
变的只是引用
lazyfox 2012-03-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

已经丢失了,但你转换回来。方法同时也已经加上了。
[/Quote]
对啊,就像。我定义了一个
动物父类Animal、

public class Animal{
public void foot();
}

然后一个猴子类,Monkey
public class Monkey extend Animal{
public void run();
}

然后,当猴子转化成动物的时候 ,由于动物没有run这个方法,它应该丢失了才对啊。
五哥 2012-03-29
  • 打赏
  • 举报
回复
类型转化了,但是对象实例没变,即使对象实例所存放的内存空间地址还是一样的
dryZeng 2012-03-29
  • 打赏
  • 举报
回复
已经丢失了,但你转换回来。方法同时也已经加上了。
未来纪元 2012-03-29
  • 打赏
  • 举报
回复
多态,编译时多态,运行时多态,类型转化了,但是对象实例没变
lazyfox 2012-03-29
  • 打赏
  • 举报
回复
奥~好像懂一点点了。子类没有重写的方法都会丢失?
[Quote=引用 1 楼 的回复:]
public class Test {
public static void main(String[] args) {
Son s = new Son();
Parent p = (Parent)s;
p.print();
//p.foo();
}
}
class Parent{
void print(){
System.out.println……
[/Quote]
五哥 2012-03-29
  • 打赏
  • 举报
回复
向下转型是安全的,即使

Object obj = new Object() ;
ArrayList b = (ArrayList)obj ;

因为 b是 ArrayList类型的引用,当然有访问ArrayList中的属性方法啦,因为 ArrayList是 Object的子类,所以是安全的,只是 ArrayList中的一些属性可能是null
崔叫兽 2012-03-29
  • 打赏
  • 举报
回复
public class Test {
public static void main(String[] args) {
Son s = new Son();
Parent p = (Parent)s;
p.print();
//p.foo();
}
}
class Parent{
void print(){
System.out.println("parent print");
}
}
class Son extends Parent{
void print(){
System.out.println("son print");
}
void foo(){
System.out.println("son foo()");
}
}
okone111222 2012-03-29
  • 打赏
  • 举报
回复
自己写个代码试试呗

50,503

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧