黑马程序员技术交流社区

标题: java 中 Object 作为默认父类 为什么出现incompatible operand... [打印本页]

作者: nuoxi0318    时间: 2013-7-31 20:46
标题: java 中 Object 作为默认父类 为什么出现incompatible operand...
本帖最后由 杨兴庭 于 2013-8-1 18:50 编辑
  1. class Person009{
  2. private String name;
  3. private int age;
  4. public Person009(String name,int age){
  5. this.name=name;
  6. this.age=age;
  7. }
  8. public boolean equals(Object obj){
  9. if (this==obj){           //此处出现 Incompatible operand type Person009 and Object
  10. return true;
  11. }
  12. if(!(obj instanceof Person009)){
  13. return false;
  14. }
  15. //Object obj=(Object)obj;
  16. Person009 per=(Person009)obj;
  17. if(per.name.equals(this.name)&&per.age==this.age){
  18. return true;
  19. }else{
  20. return false;
  21. }
  22. }
  23. public String toString(){
  24. return "XingMing "+this.name+"/tNianling: "+this.age;
  25. }
  26. }
  27. public class Object {

  28. /**
  29. * @param args
  30. */
  31. public static void main(String[] args) {
  32. // TODO Auto-generated method stub
  33. Person009 per1=new Person009("Zhang3",20);
  34. Person009 per2=new Person009("Zhang3",20);
  35. System.out.println(per1.equals(per2)?"The same people":"Another people");
  36. System.out.println(per1.equals("djlfj")?"The same people":"Another people");
  37. }

  38. }
复制代码
总共出现 3出错误 能运行 但得不出正确结果,把 Person009中equals的 接受参数 变为Person009后错误消失,但就体现不出 多态性的转化了,这是怎么回事? Object 不是默认的 父类么,怎么会出现类型不兼容的情况,求大神 指教
下面这段代码也是同样问题
  1. public class Object05 {

  2. /**
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. // TODO Auto-generated method stub
  7. int temp[]={1,3,5,7,9};
  8. Object obj=temp;
  9. print(obj);
  10. }
  11. public static void print(Object o){
  12. if(o instanceof int[]){
  13. int x[]=(int[])o;
  14. for(int i=0;i<x.length;i++){
  15. System.out.println(x[i]+"\t");
  16. }
  17. }
  18. }

  19. }
复制代码

作者: Mr_Free    时间: 2013-7-31 21:27
哥们
你这个是逻辑问题  哪有先判断obj是否跟自己相等之后  然后去判断 obj是不是person009类型的?换个顺序试试
if(!(obj instanceof Person009)){
return false;
}
if (this==obj){         
return true;
}



作者: 黑马李昂    时间: 2013-7-31 21:44
第一次程序:
01.class Person009 extends Object {...........} 问题就解决了{:soso_e100:}
第二个程序
01.public class Object05 换个类名,最好不要使用Objcet作为类名,换个Demo,运行无压力{:soso_e113:}


作者: 肖博文    时间: 2013-7-31 21:58


class Person009 {
private String name;
private int age;

public Person009(String name, int age) {
  this.name = name;
  this.age = age;
}

/**
  * 之所以会出现你所遇到的哪些问题是因为:
  *  (1)在java中java.lang包是默认自动导入的。
  *  (2)当在导入的类中出现:不同包中存在同名的类时,应该加上完整包名,加以区分。
  *  (3)在你的代码中,定义了一个Object类,与java.lang包中的Object类重名。
  *  (4)但你定义的Object类是默认继承java.lang包中的Object类,即你定义的Object类并不是所有类的父类。
  *  (5)而你现在想使用的应该是java.lang包中的Object类,所以应该加上完整包名:java.lang.Object,如代码所示。
  *  (6)另外建议在今后的编程过程中,尽量避免这种情况。
  *  (7)至于下面的那段代码我想你已经能够独自解决了。
  * */
public boolean equals(java.lang.Object obj) {
  if (this == obj) {
      
   return true;
  }
  if (!(obj instanceof Person009)) {
   return false;
  }
  // Object obj=(Object)obj;
  Person009 per = (Person009) obj;
  if (per.name.equals(this.name) && per.age == this.age) {
   return true;
  } else {
   return false;
  }
}

public String toString() {
  return "XingMing " + this.name + "/tNianling: " + this.age;
}
}

class Object{

public static void main(String[] args) {
  
  Person009 per1 = new Person009("Zhang3", 20);
  Person009 per2 = new Person009("Zhang3", 20);
  
  System.out.println(per1.equals(per2) ? "The same people"
    : "Another people");
  
  System.out.println(per1.equals("djlfj") ? "The same people"
    : "Another people");
}

}

001.JPG (48.96 KB, 下载次数: 0)

代码截图

代码截图





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