-
求解惑java强转类型问题5
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?2012年8月20日 22:43
4个答案 按时间排序 按投票排序
-
采纳的答案
1、首先equals方法属于java.lang.Object,子类需要覆盖该方法,按照覆盖规则,你必须public boolean equals(Object o) 按照这个格式进行覆盖;从而实现多态;
2、你的equals方法实现的不对,equals方法在覆盖时必须满足如下特性(直接引自javadoc): 自反性、对称性、传递性、一致性(幂等性):引用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 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。
3、实现: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; }
4、可以自己测试自反性、对称性、传递性、一致性。2012年8月21日 06:02
-
在return 语句中((SetType)o).i为什么通过这样的类型转化才能够引用i?
答:首先,o是参数变量,类型为Object,没有i的属性。其次这个equals方法是比较SetType的i属性,而equals方法覆盖父类Ojbect的equals方法,参数固定为Object类型。2012年8月20日 23:33
相关推荐
java 解惑 java 解惑 java 解惑 java 解惑 java 解惑 java 解惑
"JAVA解惑"的主题针对的是Java学习过程中遇到的一些常见问题和难点,旨在帮助开发者深入理解和解决这些问题。以下是基于这个主题和描述可能涵盖的一些关键知识点: 1. **Java基础**:这可能包括变量、数据类型、...
通过《Java解惑》这本书,初学者不仅可以系统地学习Java语言,还能获得解决实际问题的技巧,从而更好地适应编程环境并提升编程能力。书中的65个问题或主题涵盖了上述各个知识点,确保读者在学习过程中能够逐步建立起...
Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑Java PUZZLE Java 解惑 Java PUZZLE Java 解惑 Java PUZZLE Java 解惑
这份“Java解惑.pdf”文档很可能包含了解决Java开发者在编程过程中遇到的常见问题和困惑的详细解答。以下是可能涵盖的一些Java相关知识点: 1. **基础语法**:Java的基础语法包括变量、数据类型、运算符、流程控制...
《Java解惑中文版》是一本专为Java程序员设计的指南,旨在帮助读者解决在编程过程中遇到的各种问题,提升程序的健壮性。本书深入浅出地探讨了Java语言的核心概念、常见疑惑以及最佳实践,旨在使开发者能够编写出更...
综上所述,文档《java解惑 PDF版》的这部分内容涵盖了在Java中处理取余、奇偶判断和浮点数精度问题时需要考虑的诸多细节。开发者在进行编程时应当特别注意这些细节,避免走入常见的陷阱。在处理涉及精度的计算时,...
Java解惑 Java解惑 Java解惑
"Java解惑"这个主题,显然旨在帮助开发者解决他们在学习和实践中遇到的问题。在Java的世界里,疑惑可能涵盖语法、类库、框架、并发、内存管理等多个方面。下面,我们将深入探讨一些常见的Java解惑知识点。 1. **...
《JAVA解惑》这本书主要针对Java编程中遇到的各种常见问题和困惑进行了解答,旨在帮助开发者深入理解Java语言,提高编程技巧。以下是一些关键的知识点解析: 1. **异常处理**:Java中的异常处理是通过try-catch-...
《Java解惑》是一本专为Java初学者和进阶者设计的指南,旨在帮助读者解决在学习和实践中遇到的各种问题。这本书深入浅出地解析了Java编程中的常见困惑,涵盖了语言基础、类库应用、多线程、网络编程、异常处理、内存...
Java 解惑.pdf 适合新人学习。 Java新人学习
本篇文章将详细解析Java中的几个典型问题,包括自增运算符的用法、字符类型相加以及窄数字类型的提升规则。 一、自增运算符的理解与应用 在Java中,自增运算符(++)有两种用法:前缀形式(++i)和后缀形式(i++)...
### JAVA解惑中的关键知识点解析 #### 谜题1:奇数性的判断 在《JAVA解惑》一书中,作者通过一系列实例介绍了Java编程语言中的一些不易掌握的知识点。其中一个例子是关于如何正确判断一个整数是否为奇数。 **原始...
《JAVA解惑》是Java开发者领域的一本经典著作,它被广大编程爱好者称为Java四大名著之一,旨在解决初学者及有一定经验的开发者在学习和使用Java过程中遇到的各种困惑。这本书深入浅出地讲解了Java语言的核心概念和...
讲述如何在程序中避免程序缺陷和程序陷阱的,解惑的过程中,介绍了一些Java编程语言中许多不易被掌握的知识点,其阅读价值非常高,适合具有Java知识的学习者和有编程经验的Java程序员阅读。
"java解惑"这个主题旨在帮助初学者理解和解决在学习Java过程中遇到的问题,通过实例来深入浅出地讲解Java的基础知识,同时也强调了实用技巧和注意事项。 "Java解惑"的资料可能包含了两部分:`.chm`和`.pdf`格式的...
《JAVA面试题解惑系列合集》这篇文章详细地讨论了Java面试中常见的一些知识点和问题。它包括了从类的初始化顺序、String对象的创建数量、变量的覆盖、final关键字、传值和传引用的区别、字符串的处理、日期和时间的...
其次,《Java面试题解惑系列》可能包含了大量的面试真题解析,帮助读者了解面试官可能会问的问题类型,以及如何进行有效的解答。这可能包括异常处理、JVM内存模型、垃圾回收机制、反射、注解等进阶话题。例如,理解...
"Java解惑(中文).pdf"这份文档很显然是为了帮助Java开发者解决他们在编程过程中遇到的一些常见困惑和误解。这份高清版、文字版的资料很可能包含了深入浅出的解释和实例分析,以中文的形式呈现,使得国内开发者更容易...