黑马程序员技术交流社区

标题: 地址值关联问题 [打印本页]

作者: 杨华东    时间: 2012-10-5 18:20
标题: 地址值关联问题
  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{}
复制代码

作者: 李建强    时间: 2012-10-5 18:44
这个你反过来想一下
鸡 小鸡 = new 小鸡()
鸭 小鸡 = new 小鸡()
鸭子不是小鸡的父类,多态就不能用。
是的话就可以了。

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



作者: 杨华东    时间: 2012-10-5 18:48
嘿嘿  同乐 同乐  
作者: 胡斌    时间: 2012-10-5 18:59

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)不是比他们的地址,==才比地址,前者是看他们内容是否相同。
作者: 杨华东    时间: 2012-10-5 19:06
胡斌 发表于 2012-10-5 18:59
public class Test5{
public static void main(String[] args)
{

在这里面两个都是比较地址值,没错的  相信俺  嘻嘻嘻:handshake
作者: 杨华东    时间: 2012-10-5 19:32
问题已解决
作者: 李铁    时间: 2012-10-5 19:55
可以,但是前提条件是这两个类必须有关系,那就是继承
下面是个简单的例子:
父类:
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
作者: 胡斌    时间: 2012-10-5 20:37
杨华东 发表于 2012-10-5 19:06
在这里面两个都是比较地址值,没错的  相信俺  嘻嘻嘻

是取地址值,然后比内容,书上这么说的。
作者: 杨华东    时间: 2012-10-5 20:44
上帝就这么 安排的啊。哥们 别激动。。。有自己的理解风格,就是OK的。。。共同努力  黑马见{:soso_e130:}
作者: 陈琦    时间: 2012-10-5 21:31
在c语言和c++里面是可以的,就因为如此,c++产生了很多臭名昭著的bug,所以java强制进行类型检查,以避免bug的产生,java是个严格的老师。
作者: 杨华东    时间: 2012-10-6 09:40
嘻嘻嘻嘻   同乐同乐哈   说得很好  再加上具体的多态就完美了。不错不错哈。。。。。共同努力中。黑马见啊




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