[Java]オブジェクトクラス


🤔 Object Class?java.lang.Objectすべてのクラスの最上位クラスjava.lang.Objectクラスはすべてのクラスのトップクラスであり、すべてのクラスはObjectクラスを継承します.
したがって、すべてのクラスはObjectクラスのメソッドを使用することができ、いくつかのメソッドはoverrideを使用することができる.
しかしfinalメソッドは上書きできません.
Objectクラスを含むjava.langパッケージはコンパイラによって自動的にインポートされます.
だからjavalangパッケージのクラスは、単独でインポートする必要はありません.
1. toString()
デフォルトの動作:出力オブジェクトのアドレス値
上書き先:オブジェクトの情報を文字列で表示する場合
package kosta.oop;

public class AccountMain2 {
	
	public static void main(String[] args) {
		Account account1 = new Account("111-111","홍길동",1000);
		System.out.println(account1); //toString() 호출 => 없으면 부모클래스 Object 호출 : 주소값을 출력
										//Account toString() 오버라이딩 = 자신 객체의 내용이 출력된다.
	
}

Account.Javaでoverrideを実行する前の結果

Account.Javaでoverrideを実行した結果
	@Override
	public String toString() {
		return "Account [accountNo=" + accountNo + ", 
        				ownerName=" + ownerName + ", balance=" + balance + "]";
	}

2. equals()
デフォルトの動作:==の演算結果を返します.
上書き先:異なる物理メモリに存在するオブジェクトであっても、論理的に同じことを実現します.
equals()を使用して、2つのオブジェクトの同じものを論理的に上書きできます.
「物理的に同じ」は、オブジェクトがメモリに同じアドレスを有することを示し、「論理的に同じ」は、オブジェクトが物理的に異なる位置にあることを示すが、同じidのメンバーオブジェクト、同じidの受注オブジェクトなど、ドメインの有限値を区別できる点などは同じである.
Account.Javaで書き換える前に実行した結果

package kosta.oop;

public class AccountMain2 {
	
	public static void main(String[] args) {
		Account account1 = new Account("111-111","홍길동",1000);
		Account account2 = new Account("222-222", "홍길동", 5000);
		
		if(account1.equals(account2)) {		//Object equals()호출 : 주소값을 기준으로 비교
			System.out.println("동일인 계좌");
		}else {
			System.out.println("서로다른 계좌");
		}
	}
}


Account.Javaで書き換えて実行した結果
	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Account) {
			return this.getOwnerName() == ((Account)obj).getOwnerName();
		}else { 
			return false;
		}
	}

3. hashCode()
デフォルトの動作:JVMによって与えられたコード値.ストレージインスタンスのVMアドレスを10進数で返す
上書き先:2つの異なるメモリに存在するオブジェクトに一貫性を持たせます.
ハッシュコードは、JVMがインスタンスを生成する際にメモリアドレスを変換することによって付与されるコードである.
4. clone()
オブジェクトのコピーを作成する方法
Prototypeから同じ属性値のコピーを作成する
オブジェクト向けにプログラミングされた情報に反して非表示になる可能性があるため、コピーするオブジェクトはクローン可能なインタフェースを指定する必要があります.