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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨华东 中级黑马   /  2012-10-5 18:20  /  2569 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. public class Test5 {
  2. /*
  3. *一个基础问题。
  4. */
  5. public static void main(String[] args)
  6. {
  7. /*
  8. * 问大家一个问题:我们都知道在继承体系中Object是所有类的超类。
  9. * 其中有一个方法
  10. *equals(Object o)。当没有被子类复写时,其作用就是单纯的比较地址值。
  11. *
  12. *其中的参数 就是一种多态的应用。
  13. *
  14. *好了不费话了。看下面的。
  15. * */
  16. Demo1 d1 = new Demo1();//获取一个地址值 指向了:d1
  17. Demo1 d2=d1;//然后把 获取的地址值又指向了同类其他引用:d2
  18. System.out.println(d1.equals(d2));//结果肯定是 true
  19. /*
  20. * 我的问题:
  21. * 既然可以把地址值赋给同类其他引用,
  22. * 那么我们能不能把地址值赋给不同类的其他引用呢?
  23. *
  24. * 如下:
  25. * */
  26. Demo1 d3=new Demo1();
  27. Demo2 d4=d3;//此时会报错。<FONT color=red>请问如何改动?
  28. </FONT>}
  29. }
  30. class Demo1{}

  31. class Demo2{}
复制代码

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

10 个回复

倒序浏览
这个你反过来想一下
鸡 小鸡 = new 小鸡()
鸭 小鸡 = new 小鸡()
鸭子不是小鸡的父类,多态就不能用。
是的话就可以了。

类内部结构不一样。鸭子的方法比如游泳,小鸡不会只能去死。
而且,面向对象要尊重客观规律,你强制给小鸡个鸭爸爸···


评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
嘿嘿  同乐 同乐  
回复 使用道具 举报

public class Test5{
public static void main(String[] args)
{

Demo1 d1 = new Demo1();
Demo1 d2=d1;
System.out.println(d1.equals(d2));

Demo2 d3=new Demo2();
Demo1 d4=d3;
System.out.println(d3.equals(d4));
}
}
class Demo1{}

class Demo2 extends Demo1{
       
}
1.根据赋值兼容规则:对象之间只能子类赋给父类对象。
2.而d1.equals(d2)不是比他们的地址,==才比地址,前者是看他们内容是否相同。

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡斌 发表于 2012-10-5 18:59
public class Test5{
public static void main(String[] args)
{

在这里面两个都是比较地址值,没错的  相信俺  嘻嘻嘻:handshake
回复 使用道具 举报
问题已解决
回复 使用道具 举报
李铁 中级黑马 2012-10-5 19:55:34
7#
可以,但是前提条件是这两个类必须有关系,那就是继承
下面是个简单的例子:
父类:
public class Father {
       
   public void fun1(){
           fun2();
   }
   public void fun2(){
           System.out.println("AAAA");
   }
  子类:
public class Child extends Father {
  public void fun2(){
           System.out.println("CCC");
  }
   public static void main(String args[]){
          
           Child c1 = new Child();
           //子类的对象赋给父类的引用
           Father f=c1;
         //成员方法在多态调用时,编译看左边,运行看右边
           f.fun1();
          
   }
}
}
输出结果:CCC

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
胡斌 中级黑马 2012-10-5 20:37:04
8#
杨华东 发表于 2012-10-5 19:06
在这里面两个都是比较地址值,没错的  相信俺  嘻嘻嘻

是取地址值,然后比内容,书上这么说的。
回复 使用道具 举报
上帝就这么 安排的啊。哥们 别激动。。。有自己的理解风格,就是OK的。。。共同努力  黑马见{:soso_e130:}
回复 使用道具 举报
在c语言和c++里面是可以的,就因为如此,c++产生了很多臭名昭著的bug,所以java强制进行类型检查,以避免bug的产生,java是个严格的老师。
回复 使用道具 举报
嘻嘻嘻嘻   同乐同乐哈   说得很好  再加上具体的多态就完美了。不错不错哈。。。。。共同努力中。黑马见啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马