为什么 Object 类是 Java 中所有类的超类?
javaobject oriented programmingprogramming
Java.lang.Object 类是类层次结构的根或超类,存在于 java.lang 包中。所有预定义类和用户定义类都是 Object 类的子类。
为什么 object 类是超类
可重用性
- 每个对象都有 11 个公共属性,每个 Java 开发人员都必须实现这些属性。
- 为了减轻开发人员的负担,SUN 开发了一个名为 Object 的类,通过 11 个方法实现了所有这 11 个属性。
- 所有这些方法都具有所有子类通用的通用逻辑,如果此逻辑不满足子类要求,则子类可以覆盖它
运行时多态性
- 为了实现运行时多态性,我们可以编写一个方法来接收和发送任何类型的类对象作为参数和返回类型。
每个类的通用功能对象
比较两个对象
- public boolean equals(Object obj)
检索哈希码
- public int hashcode()
检索运行时类对象引用
- public final Class getClass()
以字符串格式检索对象信息
- public String toString()
克隆对象
- protected Object clone() 抛出 CloneNotSupportedException
对象清理代码/资源释放代码
- protected void finalize() 抛出 Throwable
等待当前线程直到另一个线程调用notify()
- public final void wait() 抛出 InterruptedException
等待当前线程直到另一个线程调用notify()指定的时间
- public final void wait(long timeout) 抛出 InterruptedException
等待当前线程直到另一个线程调用notify()指定的时间
- public final void wait(long timeout, int nano) 抛出 InterruptedException
向等待线程通知对象锁的可用性
- public final void notify()
向等待线程通知对象锁的可用性
- public final void notifyAll()
示例
class Thing extends Object implements Cloneable { public String id; public Object clone() throws CloneNotSupportedException { return super.clone(); } public boolean equals(Object obj) { boolean result = false; if ((obj!=null) && obj instanceof Thing) { Thing t = (Thing) obj; if (id.equals(t.id)) result = true; } return result; } public int hashCode() { return id.hashCode(); } public String toString() { return "This is: "+id; } } public class Test { public static void main(String args[]) throws Exception { Thing t1 = new Thing(), t2; t1.id = "Raj"; t2 = t1; // t1 == t2 and t1.equals(t2) t2 = (Thing) t1.clone(); // t2!=t1 but t1.equals(t2) t2.id = "Adithya"; // t2!=t1 and !t1.equals(t2) Object obj = t2; System.out.println(obj); //Thing = Adithya } }
输出
This is: Adithya