1. 为什么说 Java 中的所有类都 is-a Object?
因为 Object 是所有类的最终父类,其他类都直接或间接继承自 Object 类。
2. 在 JDK 文档中查找 Object 的 toString 方法。说一说,该方法有什么用?使用 Eclipse 查看 Object 的 toString 方法的代码,结合代码说说该代码的用途。
该方法可以返回该对象的字符串表示形式。
toString 方法的代码如下:
public String toString() {return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
调用 getClass() 获取对象的运行时类,调用 getName() 返回类的全限定名,hashCode() 返回对象的哈希码,Integer.toHexString() 将其转换为十六进制字符串。
3. 在 IDE 中查看 Object 的 equals 方法的代码,说说 equals 的用途。该方法被什么修饰符修饰,意味着什么?什么时候需要覆盖 equals 方法?结合 String 类的 equals 方法说说覆盖如何体现子类特有的特性?
Equals 方法的代码如下:
public boolean equals(Object obj) {return (this == obj);
}
equals 方法用于判断两个引用是否指向堆内存中的同一个对象实例。该方法被 public 修饰,意味着所有类都可以访问并重写,并且让所有对象都能通过统一的 equals 方法进行比较。当 equals 方法无法满足业务场景对 "相等性" 的定义时,就需要重写 equals 方法。String 类重写 equals 方法,将比较逻辑从 Object 类默认的内存地址比较,改为基于自身字符序列内容的比较,通过判断字符数组长度和逐个字符是否一致来确定相等性。
4. 如果在子类中想要复用父类的代码,要怎么办?
子类中复用父类的代码可以通过 super 关键字实现。
5. 可选:继承是复用代码的唯一方式吗?
不是,继承只是 Java 中代码复用的方式之一,而非唯一方式,除继承外,还有组合、接口等方式。