this代表的是Person类,当前类的对象;父类引用指向子类对象是不能访问子类里的独有成员这个没有错。
o是形参,转之前先进行了判断,符合条件后才强转转成Person类,然后进行比较
下面的是标准写法,供你参考
通常自己的类里面这样重写equals方法,如果重写equals,则必须重写hashcode方法
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Share other = (Share) obj; // 换成你自己的类
if (cn_share_id == null) {
if (other.cn_share_id != null) // 要比较的成员
return false;
} else if (!cn_share_id.equals(other.cn_share_id))
return false;
return true;
}
你要知道每一个类里面的this到底是什么意思?你的理解是错误的!注意:对于继承过的类!这些有继承关系的类里面的this都是代表着最后一个new出对象时的那个对象!我写了3个类!你看看结果就知道了!
Person类
package question;
public class Person {
private int uid;
private String name;
public Person() {
super(); //这里是Object类默认构造函数
System.out.println("当前对象的简单名:"+this.getClass().getSimpleName());
System.out.println("当前对象的复杂名:"+this.getClass().getName());
}
}
Student类
package question;
public class Student extends Person {
private String stu_id;
public Student() {
super(); //Person构造函数
System.out.println("当前对象的简单名:"+this.getClass().getSimpleName());
System.out.println("当前对象的复杂名:"+this.getClass().getName());
}
}
Test类
package question;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
new Student();
}
}
测试结果:
当前对象的简单名:Student
当前对象的复杂名:question.Student
当前对象的简单名:Student
当前对象的复杂名:question.Student
第二个关于Object就不讲了!
问题是,你是重写哪个类的equals方法咯,你既然是重写Person类的equals的话,this又这么会是Object的引用呢?
this指的是当前类对象的实例,既然this指的是Person的话,有为什么不能访问name呢?