Java
 Computer >> コンピューター >  >> プログラミング >> Java

ObjectクラスがJavaのすべてのクラスのスーパークラスであるのはなぜですか?


Java.lang.Object classは、クラス階層のルートまたはスーパークラスであり、java.langパッケージに含まれています。 。すべての定義済みクラスとユーザー定義クラスは、オブジェクトのサブクラスです。 クラス。

オブジェクトクラスがスーパークラスである理由 再利用可能性
  • すべてのオブジェクトには11の共通プロパティがあり、これらのプロパティはすべてのJava開発者が実装する必要があります。
  • 開発者の負担を軽減するために、SUNは、これら11のプロパティすべてを11のメソッドで実装することにより、Objectというクラスを開発しました。
  • これらすべてのメソッドには、すべてのサブクラスに共通の汎用ロジックがあります。このロジックがサブクラスの要件を満たしていない場合、サブクラスはそれをオーバーライドできます
ランタイムポリモーフィズム
  • 実行時のポリモーフィズムを実現して、引数および戻り型として任意の型のクラスオブジェクトを送受信する単一のメソッドを記述できるようにするため。

すべてのクラスオブジェクトに共通する機能

2つのオブジェクトの比較

  • public boolean equals(Object obj)
ハッシュコードの取得
  • public int hashcode()
ランタイムクラスオブジェクト参照の取得
  • public final Class getClass()
文字列形式でのオブジェクト情報の取得
  • public String toString()
クローンオブジェクト
  • 保護されたオブジェクトclone()はCloneNotSupportedExceptionをスローします
オブジェクトクリーンアップコード/リソースリリースコード
  • protected void finalize()throws Throwable
別のスレッドがnotify()を呼び出すまで現在のスレッドを待つ
  • public final void wait()throws InterruptedException
別のスレッドがnotify()を指定された時間呼び出すまで、現在のスレッドを待機します
  • public final void wait(long timeout)throws InterruptedException
別のスレッドがnotify()を指定された時間呼び出すまで、現在のスレッドを待機します
  • public final void wait(long timeout、int nano)throws 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

  1. Java 9での@Deprecatedアノテーションの改善点は何ですか?

    @Deprecatedで注釈を付けることができる要素 この特定の要素が以下の理由で使用されなくなったことを意味します 使用するのは危険であり、エラーが発生する可能性があります。 将来のバージョンでは互換性がなくなる可能性があります。 将来のバージョンで削除される可能性があります。 より優れた、より効率的なソリューションがそれに取って代わりました。 Java 9には、次の2つの新しい要素が追加されています。以降 およびforRemoval 属性。 1)以降: この要素は、注釈付きAPI要素の非推奨バージョンを指定します。 2)forRemoval: 注釈付きのAPI要素を表す

  2. Javaのスーパーキーワード

    スーパー変数は直接の親クラスインスタンスを参照します。 スーパー変数は、直接の親クラスメソッドを呼び出すことができます。 super()は、直接の親クラスコンストラクターとして機能し、子クラスコンストラクターの最初の行である必要があります。 オーバーライドされたメソッドのスーパークラスバージョンを呼び出す場合、superキーワードが使用されます。 例 class Animal {    public void move() {       System.out.println("Animals can move");