weixin_42466987 2012-08-20 22:43
浏览 325
已采纳

求解惑java强转类型问题

class SetType{
int i;
public SetType(int n){i=n}
public boolean equals(Object o){
return o instanceof SetType && (i==((SetType)o).i);
}
}
在return 语句中((SetType)o).i为什么通过这样的类型转化才能够引用i?

  • 写回答

4条回答 默认 最新

  • jinnianshilongnian 2012-08-21 06:02
    关注

    1、首先equals方法属于java.lang.Object,子类需要覆盖该方法,按照覆盖规则,你必须public boolean equals(Object o) 按照这个格式进行覆盖;从而实现多态;

    2、你的equals方法实现的不对,equals方法在覆盖时必须满足如下特性(直接引自javadoc): 自反性、对称性、传递性、一致性(幂等性):
    [quote]public boolean equals(Object obj)指示其他某个对象是否与此对象“相等”。
    equals 方法在非空对象引用上实现相等关系:

    自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
    对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
    传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true。
    一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
    对于任何非空引用值 x,x.equals(null) 都应返回 false。
    Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。

    注意:当此方法被重写时,通常有必要重写 hashCode 方法,以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
    [/quote]

    3、实现:
    [code="java"]public boolean equals(Object o){
    if(this == o) { //一致性 自己和自己比较为true
    return true;
    }
    if(o == null) {//对于任何非空引用值 x,x.equals(null) 都应返回 false。
    return false;
    }
    if(!(o instanceof SetType)) { //类型不兼容 直接返回false
    return false;
    }
    SetType st = (SetType)o; // 把o(Object类型)强制造型为SetType类型,否则获取不到SetType中的成员(Object是所有类型的父类型、提供了几个共性方法(如toString、equals、hashCode) 为所有对象继承 可以参考jdk文档);

     if(this.i == st.i) {
            return true;
     }
     return false;
    

    }
    [/code]

    4、可以自己测试自反性、对称性、传递性、一致性。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元