/* object:所有类的根类 object是不段抽取而来的,具有所有对象都具备的共性内容。 常用的共性功能: */
/* class Fu //extends Object { Fu() { super(); } } class Zi extends Fu //子类并不继承object 因为java没有多继承 { Zi() { super(); } }*/
class Person extends Object {
private int age;
Person(int age)
{
this.age = age;
}
//我们发现 equal函数完全可以用 == 来代替 十分鸡肋
//并且 如果我们不想要比较地址值 而是内容 那我们该怎么做?
//如下定义一个比较函数吗?
public boolean compare(Person p)
{
return this.age == p.age;
}
/* *(non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) * 一般都会覆盖此方法,根据对象的特有内容,建立判断对象是否有相同的依据。 * 一般不比较地址值 没有意义。 */
//然而 因我们继承了object 已经有equal函数 我们只需要进行覆写。
public boolean equals(Object obj)//注意 参数需和父类中的函数参数相同 否则便是重载
{
//return this.age == obj.age;//出现问题:其实参数是多态形式 传进来的参数已经
//被向上提升为object型 而提升后子类特有数据无法被调用。
//因此 我们需要向下转型: 注意:向下转型时要注意类型。
if(!(obj instanceof Person))
{
// return false;
throw new ClassCastException("类型错误");
}
Person p = (Person)obj;
return this.age == p.age;
}
}
class Demo3 {
}
public class ObjectDemo1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person(20);
Person p2 = new Person(10);
Demo3 d = new Demo3();
//出现新问题 因为覆写的equals函数里的参数是object
//那么意味着所有类都可以往里传。
//如我们现在往里穿demo形式的d
//这时 我们就需要做一些处理。
System.out.println(p1.equals(d));
// System.out.println(p1.equals(p2));//false 比较的地址值
}
}
相关文章
- Object类中equals,hashCode和toString方法的学习
- JAVA-初步认识-第十一章-object类-equals方法
- Java Object类及其equals方法
- Java中Object类的equals()和hashCode()方法深入解析
- JAVA中Object类 equals()方法和“==”怎样区别
- 重写Object类中的Equals方法(Java)
- 类Object中的equals()方法
- 1.9(java学习笔记)object类及toString()与equals()方法
- [Java] Object方法浅析(一): equals与hashCode
- (二十五)Java工具类EqualsBuilder协助Object.equals(object)方法详解