第一个问题:原有的equals比较的是字符串,而现在你传入的是对象,所以得重写equals建立自己的比较方式。
第二问题:不是判断两个类是否相同,是判断这个obj是否是Person的实例化对象,如果是就返回true,如果不是就返回false
第三个问题:是多态的原理,Object obj = new Person(); obj父类的对象,不可能调用子类的属性,所以向下转型是为了调用子类的属性,
第四个问题:当你向集合中传入第一个对象的时候,他不会调用equals方法,因为就一个对象,没有比较的。传入第二个对象的时候,这个对象就是本类对象this,而你要比较的是以前传入的对象,就用p调用。
如果你都用p调用的话,那么return返回的必然是true。而你的只剩第一个元素,因为第一个元素不调用
equals方法。
|