public boolean equals(Object o)
{
if(o instanceof Person)
{
Person a=(Person)o;
if(this.name.equals(a.name)&&this.age==a.age)//这个this 是调用本方法的对象 是Object类引用
{
return true;
}
}
return false;
}
这个this在主程序里是Object类的引用 为什么他可以调用name成员变量呢 不是说父类引用指向子类对象是不能访问子类里的独有成员吗 他又没进行过向下转型 而形参传递过来的对象同样是Object类的引用 为什么他就必须要向下转型才能调用name呢
是重写的Person类的equals
主程序在这
public class Test
{
public static void main(String[] args)
{
Object obj=new Person("sd",2);
Person p=new Person("sd",2);
System.out.println(obj.equals(p));
}
}
obj就是这个this是吧 他是父类引用 为什么在重写的equals()里可以直接访问子类成员name 而不用向下转型呢
你要知道每一个类里面的this到底是什么意思?你的理解是错误的!注意:对于继承过的类!这些有继承关系的类里面的this都是代表着最后一个new出对象时的那个对象!我写了3个类!你看看结果就知道了!
Person类
package question;Test类
package question;
测试结果:
当前对象的简单名:Student
当前对象的复杂名:question.Student
当前对象的简单名:Student
当前对象的复杂名:question.Student
第二个关于Object就不讲了!