A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

下面是毕老师讲的关于调用object中比较方法的程序
class Demo
{
        private int num;
        Demo(int num)
        {
                this.num = num;
        }
        public boolean equals(Object obj)//Object obj = new Demo();Object obj = new Persion();多态
        {               
                Demo b = (Demo) obj;
                return this.num == b.num;
        }
}
class Persion
{
}
class ObjectDemo
{
        public static void main(String[] args)
        {
                Demo d1 = new Demo(4);
                Demo d2 = new Demo(6);
                Persion p = new Persion();
                System.out.println(d1.equals(p));
进行编译的时候没问题,运行的时候报错,persion无法转换为demo。问题来了?
问:定义的Object obj = new Persion();说明obj虽然是对象persion中的,但它所属类是Object,Demo又继承了Object,理论上obj可以转换成Demo啊?
为什么说persion无法转换为demo?附图说明我的想法。大神帮我看看我那儿理解错了~
如图:Object obj = new Demo();说明obj属于阴影部分的,类属于Object但也是Demo中的一部分,所以可以转换成Demo。
Object obj = new Persion();说明obj也属于阴影部分,也是Demo中的一部分为什么不能转换成Demo呢?

捕获.PNG (5.87 KB, 下载次数: 13)

捕获.PNG

8 个回复

倒序浏览
应该是Demo和Person都属于Object,而Demo和Person之间没有交集。Demo是Object的子类,Person也是Object的子类。既然Person不属于Demo,自然也无法转换成Demo。
回复 使用道具 举报
pvbj0314 发表于 2015-5-19 22:13
应该是Demo和Person都属于Object,而Demo和Person之间没有交集。Demo是Object的子类,Person也是Object的子 ...

默认的所有类不都是继承的Object这个父类吗?Object应该是Demo和Persion的子集吧?
回复 使用道具 举报
立志转行 发表于 2015-5-19 22:18
默认的所有类不都是继承的Object这个父类吗?Object应该是Demo和Persion的子集吧? ...

黑马是马,白马也是马,那么黑马和马,谁是子集,谁是父集?
回复 使用道具 举报
pvbj0314 发表于 2015-5-19 22:26
黑马是马,白马也是马,那么黑马和马,谁是子集,谁是父集?

按继承说应该是黑马是父类,马是子类,子类继承了父类所以范围应该大于父类
但是按提取的说,白马和黑马的共性都是马,父类应该是马!!!彻底蒙圈了!
回复 使用道具 举报
Object所有类父类
回复 使用道具 举报

是啊,但是我的问题出在那儿?
回复 使用道具 举报
立志转行 发表于 2015-5-19 22:46
是啊,但是我的问题出在那儿?

答案不是在第一次回答时写了吗?用黑马代替Demo类,白马代替Person类,马代替Object类,另外假设小黑马是黑马的子类,黑马中有成员变量black,小黑马中另有成员变量small,白马中有成员变量white。这样,你可以说小黑马的对象是黑马,但不能说白马的对象是黑马。所以黑马引用可以指向黑马的对象,也可以指向小黑马。而无论怎样,黑马引用是不可能指向白马的。
你的Demo实际上等同于将白马的对象转换为黑马,当然不可以。但你可以将小黑马对象转换为黑马,而这个转换实际不需要强制转换,因为小黑马也是黑马。如果你是将指向小黑马的黑马引用内容赋值给一个小黑马引用,则需要告诉编译器这个黑马引用指向的是小黑马对象,就需要用类型转换的操作。
回复 使用道具 举报
ljc979508577 来自手机 中级黑马 2015-5-20 20:31:05
9#
object是所有类的父类,子类继承父类,但是子类之间不可以相互转换,父类和之类之间可以,就是这样,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马