黑马程序员技术交流社区
标题: java 中 Object 作为默认父类 为什么出现incompatible operand... [打印本页]
作者: nuoxi0318 时间: 2013-7-31 20:46
标题: java 中 Object 作为默认父类 为什么出现incompatible operand...
本帖最后由 杨兴庭 于 2013-8-1 18:50 编辑
- class Person009{
- private String name;
- private int age;
- public Person009(String name,int age){
- this.name=name;
- this.age=age;
- }
- public boolean equals(Object obj){
- if (this==obj){ //此处出现 Incompatible operand type Person009 and Object
- 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;
- }
- }
- public class Object {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- 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");
- }
- }
复制代码 总共出现 3出错误 能运行 但得不出正确结果,把 Person009中equals的 接受参数 变为Person009后错误消失,但就体现不出 多态性的转化了,这是怎么回事? Object 不是默认的 父类么,怎么会出现类型不兼容的情况,求大神 指教
下面这段代码也是同样问题- public class Object05 {
- /**
- * @param args
- */
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int temp[]={1,3,5,7,9};
- Object obj=temp;
- print(obj);
- }
- public static void print(Object o){
- if(o instanceof int[]){
- int x[]=(int[])o;
- for(int i=0;i<x.length;i++){
- System.out.println(x[i]+"\t");
- }
- }
- }
- }
复制代码
作者: 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 |