为什么对象类是Java中所有类的超类?

Java.lang.Object 类是类层次结构的根或超类,存在于java.lang软件包中。所有预定义的类和用户定义的类都是Object 类的子类。

为什么对象类是超类

重用性

  • 每个对象都有11通用属性,每个Java开发人员都必须实现这些属性。

  • 为了减轻开发人员的负担,SUN通过使用11种方法实现所有这11属性,开发了一个名为Object的类。

  • 所有这些方法都具有所有子类通用的通用逻辑,如果该逻辑不满足子类要求,则子类可以覆盖它

运行时多态

  • 为了实现运行时多态性,以便我们可以编写一个方法来接收和发送任何类型的类对象作为参数和返回类型。

每个类对象的通用功能

 比较两个对象

  • 公共布尔等于(Object obj)

检索哈希码

  • 公共诠释 hashcode()

检索运行时类对象参考

  • 公开决赛 getClass()

以字符串格式检索对象信息

  • 公共字符串 toString()

克隆对象

  • 受保护的对象clone()抛出CloneNotSupportedException

对象清理代码/资源释放代码

  • 受保护的空finalize()投掷

等待当前线程,直到另一个线程调用 notify()

  • 公共 final void wait()引发InterruptedException

等待当前线程,直到另一个线程调用notify()指定的时间量

  • 公共 final void 等待(长时间超时)引发InterruptedException

等待当前线程,直到另一个线程调用notify()指定的时间量

  • 公共 final void 等待(长超时,int nano)抛出InterruptedException

通知有关等待线程的对象锁可用性

  • 公众 final void notify()

通知有关等待线程的对象锁可用性

  • 公众 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