Object类----equals方法与equals覆写
2017-10-24 10:37
399 查看
/* 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方法与equals覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- Object类学习 equals() 方法和toString()方法覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- Object类----equals方法与equals覆写
- 比较的相等覆写 equals 方法 注意事项
- 第03章 面向对象 36 Object类之equals方法
- 多态Object类equals方法学习笔记ObjectDemo.java
- 类中equals,hashcode方法的覆写
- 建议48:覆写equals方法必须覆写hashCode方法
- Object类中的equals与toString方法概述
- 【Java基础之Object类(一)】Java中Object类中的所有方法(toString、equals、hashCode、clone、finalize、wait和notify等)详解
- JAVA——Object类,equals方法
- object类的toString()与equals()方法
- 学习effective java-9对所有对象共同的方法之覆写equals方法时请同时覆写hashCode