黑马程序员技术交流社区

标题: 关于对象的一问题,求解答 [打印本页]

作者: 回忆~坚    时间: 2014-3-10 12:57
标题: 关于对象的一问题,求解答
本帖最后由 回忆~坚 于 2014-3-10 16:22 编辑

Dog dog = new Dog();
Cat cat =(Cat)dog;

求解这里有几个对象,怎么判断对象的个数?
作者: 胡文彬    时间: 2014-3-10 13:28
这里有只有一个dog对象。第一句话应该没问题。Cat cat =(Cat)dog;这句话并没有新建对象,每个对象有一个地址,设dog的地址是   60;第二句就是把60,也就是dog的家门的钥匙给cat,这时,cat就能进去了。不过你学的代码涉及到类型转化问题,不符合日常逻辑,因为你cat写出dog的父类。
作者: Q.z.l    时间: 2014-3-10 13:43
你用了new就申请了对象的内存空间,所以dog是一个对象了。
但是你dog强转cat。假如这两个类的基类都是动物类的话那是不行的。
假如你cat是dog的基类的话,那cat只是一个引用,即cat只是一个变量,指向了dog这个对象
作者: 主角    时间: 2014-3-10 14:20
从表面上看好像有两个对象一个dog,一个cat。但实际不然 楼主首先从内存空间中创建了一块属于Dog类对象的空间。而声明cat的时候是强转dog对象的,并没有声明内存空间。所以这里存在一个引用类型的关系。好比你在你电脑中的D盘中有个程序,它本身就好比dog,而你把它新建个快捷方式到桌面就好比cat,但是它们指向的是同一个文件。
作者: 上官镇海    时间: 2014-3-10 14:27
表面理解是有两个对象(一个是dog另一个是cat)但是要注意对象之间的相互转换(dog转换为cat)虽然有时可以但是理论上是不可以的。
作者: Max_骏    时间: 2014-3-10 14:37
这里有只有一个dog对象;dog转换为cat看似可以,但是理论是行不通的,所以这里面就只有dog这个对象!
作者: azve    时间: 2014-3-10 15:05
Q.z.l 发表于 2014-3-10 13:43
你用了new就申请了对象的内存空间,所以dog是一个对象了。
但是你dog强转cat。假如这两个类的基类都是动物 ...

要不要每次都回答这么好。。。搞得我都不好意思说话了:lol
作者: Q.z.l    时间: 2014-3-10 15:55
azve 发表于 2014-3-10 15:05
要不要每次都回答这么好。。。搞得我都不好意思说话了

:L分数差不多够了。。留给你们回答呗:handshake
作者: 段誉    时间: 2014-3-10 16:29
本帖最后由 段誉 于 2014-3-10 16:31 编辑

Dog dog = new Dog();
Cat cat =(Cat)dog;
里面虽然有两个对象,但是dog对象不能赋值给car的对象。
一般的有类,看new的个数判断,但是对象不能强制转换;
calss dog{

public text {
    public static void main (String[]  args){      dog p1 =new dog();
      dog p2 =new dog();
     dog p3=new dog();

     dog p4 =new dog();

     dog p5 =new dog();


   }


new了 5个所以有啦5个对象。

我看楼主看代码只看啦一半把;这应该是关于对象强制转换的把 。直接转化没见过;要实现dog也有这功能,
你可以应用继承去来实现。 创建一个dog类, 用car的类去继承dog的内容。
class dog(){

class car  extends(){




作者: azve    时间: 2014-3-10 20:15
Q.z.l 发表于 2014-3-10 15:55
分数差不多够了。。留给你们回答呗

哈哈~~不怕,我们慢慢来。。
作者: czwanglei    时间: 2014-3-10 20:46
Q.z.l 发表于 2014-3-10 15:55
分数差不多够了。。留给你们回答呗

加油。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2