黑马程序员技术交流社区
标题:
关于Objcet的问题
[打印本页]
作者:
窝牛。
时间:
2014-4-26 12:23
标题:
关于Objcet的问题
本帖最后由 窝牛。 于 2014-4-28 09:23 编辑
class Demo
{
private int num;
Demo(int num)
{
this.num=num;
}
public boolean equals(Object obj)
{
Demo d=(Demo)obj;
return this.num==d.num;
}
}
class Person
{
}
class ObjectDemo
{
public static void main(String[] args)
{
Demo d1=new Demo(4);
Demo d2=new Demo(5);
Person p=new Person(6);
System.out.println(d1.equals(p));
}
}
Objcet是所有类的父类,应该说Person也继承了Objcet类..Person类中也有equals方法啊.为什么传p去那却不能向下转型,不能比较值地址是否相同呢?
求大神科普.......谢谢了...................
作者:
水竹
时间:
2014-4-26 13:09
Demo d=(Demo)obj;
复制代码
obj凭什么能强制转换成Demo?Person又凭什么能强制转换成Demo,根本没有道理嘛。
作者:
倪大大
时间:
2014-4-26 13:55
你怎么能把 Person类型转换成 Demo呢? 这是完全不相同的两个类型嘛,当然他们的父类都是Object 像你这样那不是天下类都可以相互转换了?
还有 父类引用是不能转换成子类的.会报错 只能子类转换成父类
作者:
爱翚
时间:
2014-4-26 15:38
class Demo {
private int num;
Demo(int num) {
this.num = num;
}
public boolean equals(Object obj) {
Demo d = (Demo) obj;
return this.num == d.num;
}
}
class Person {
}
class ObjectDemo {
public static void main(String[] args) {
//创建Demo类的对象d1,调用构造函数Demo(int num),此时d1这个引用所对应的num值为4
Demo d1 = new Demo(4);
//创建Demo类的对象d2,调用构造函数Demo(int num),此时d2这个引用所对应的num值为5
Demo d2 = new Demo(5);
//这句话报错,因为Person类中并没有输入整形参数的构造方法
Person p = new Person(6);
/*
* 即使上句代码是正确的,那么p是Person类的一个对象
* 虽然Person类和Demo类都默认继承于Object这个基类
* 虽然根据多态的原理d1和p都被向上转型为Object类型的引用,
* 但d1是根据Demo类创建的对象,p是根据Person类创建的对象
* 而且Person和Demo这两个类是没有关系的,不存在任何继承关系
*
* 所以您这段代码中想把Person类创建的类型为Object类型的引用p,
* 强制类型转换成Demo类的类型是做不到的
*/
System.out.println(d1.equals(p));
}
}
作者:
eternallove
时间:
2014-4-26 16:23
Person p=new Person(6);这句话会报错的,Person类没有对应的构造方法。
public boolean equals(Object obj)
{
Demo d=(Demo)obj;
return this.num==d.num;
}
复制代码
这个方法,Object obj 这是个方法的参数这是说明这个方法可以接收任何类对象,可是呢你用了一个类转型,在多态中常见,这种你能是子类转父类引用的情况,可是你的这个方法你确定是否传递Demo的父类你有可能会吧与Demo类没有关系的类给传进来,你看你就传进去了一个和Demo没有一丝关系的Person类,你怎么让它转,你这样写实际上就相当于Demo d = (Demo)P,这是一个很大的错误。。。
作者:
窝牛。
时间:
2014-4-28 09:23
倪大大 发表于 2014-4-26 13:55
你怎么能把 Person类型转换成 Demo呢? 这是完全不相同的两个类型嘛,当然他们的父类都是Object 像你这样那 ...
谢谢,明白了..非常详细.
作者:
邵景伦
时间:
2014-4-28 09:31
class Demo
{
private int num;
Demo(int num)
{
this.num=num;
}
public boolean equals(Object obj)
{
Demo d=(Demo)obj;
return this.num==d.num;
}
}
class Person extends Demo;//xiugaihou
{
}
class ObjectDemo
{
public static void main(String[] args)
{
Demo d1=new Demo(4);
Demo d2=new Demo(5);
Person p=new Person(6);
System.out.println(d1.equals(p));
}
}//自己定义的Demo类没有和Person类明确继承关系。虽然Object是所有类的父类,但是子类之间是不存在关系的
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2