본문 바로가기
JAVA

Object 클래스: 모든 클래스의 (최상위)

by EUN-JI 2023. 7. 15.

Object 클래스는 모든 클래스의 최상위 클래스이다. ★

: 하나의 슈퍼 클래스를 확장해서 여러 개의 서브 클래스를 선언할 수 있음.

: 서브 클래스를 더욱 확장해서 새로운 서브 클래스를 생성하는 것도 가능.

: 하나의 서브 클래스가 여러 개의 슈퍼 클래스로부터 상속받을 수 없다. 

 

Object 클래스의 주요 기능 메소드들.


1. to String()

: 객체의 정보를 소개하는 문자열을 리턴하는 기능


2. equals(Object obj)

: 전달받은 obj와 같은 객체인지 여부를 리턴


3. hashCode()

: 객체의 메모리 주소를 숫자로 리턴해 줌.(가상주소)


4. getClass()

: 클래스의 정보를 가지고 있는 객체를 리턴해줌. 


5. wait()  /  notify()  /  notifyAll()

: Thread???????라는 문법에서 사용하는 기능.. <추후 수업>

 

 

 

** 2개 이상의 슈퍼 클래스로부터 상속받기 **

하나의 서브 클래스가 여러 개의 슈퍼 클래스로부터 상속을 받을 수 없다.

다중 상속은 인터페이스(interface)라는 메커니즘을 통하여 구현가능

 

import java.util.Random;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//Object class : 모든 JAVA클래스의 부모 클래스(최상위 클래스)
		//JAVA언어에 존재하는 모든 클래스는 extends의 명시여부와 상관없이
		//무조건 Object 클래스를 상속받은 상태로 만들어짐.
		
		Test t= new Test();
		t.toString();  //개발자가 만들지 않은 기능메소드가 존재함.
		
		//java의 객체라면 무조건 가지고 있어야할 기능을 미리 작성하여
		// Object 라는 이름의 클래스를 만들어 놓았음..
		//어떤 경우에도 이 기능들이 존재하도록 하기위해 자동 상속되도록 해놨음.
		
		//Object 클래스의 주요 기능 메소드들.
		//1. toString()          - 객체의 정보를 소개하는 문자열을 리턴하는 기능
		//2. equals(Object obj)  - 전달받은 obj와 같은 객체인지 여부를 리턴
		//3. hashCode()          - 객체의 메모리 주소를 숫자로 리턴해 줌.(가상주소)
		//4. getClass()          - 클래스의 정보를 가지고 있는 객체를 리턴해줌. 
		//5. wait(), notify(), notifyAll() -Thread라는 문법에서 사용하는 기능..
		
		//1. toString()
		String s =t.toString();
		System.out.println(s);   //default 값: 클래스명@해시코드(자바객체주소) 
		
		t=new Test();
		s=t.toString();
		System.out.println(s);
		
		Random rnd= new Random();
		System.out.println(rnd.toString());  //패키지명.클래스명@해시코드 //java.util.Random@cac736f
		
		//근데.toString()의 결과가 이상한 경우가 있음.
		String str=new String("Hello");
		System.out.println(str.toString());  // Hello
		//String클래스는 .toString()의 기본기능을 개선하여 값을 보여주도록 했음.
		//즉. override한 것임.
		
		First f= new First();
		System.out.println(f.toString());   //내 마음대로 소개글 변경: 10
		
		//2.equals() : 같은 객체인지 비교하는 기능 메소드
		Test t1 =new Test();
		Test t2= new Test();
		Test t3= t1;
		
		System.out.println(t1.equals(t2)); //false
		System.out.println(t1.equals(t3));  //true
		
		//사실 위 기능메소드는 잘 안쓰기도 함. why? 비교연산자로 가능해서
		System.out.println(t1==t2);   //주소비교 false
		System.out.println(t1==t3);  //true
		
		//근데 String 클래스의 equals()는 기본 기능과 다르게 동작함 -override했음. 
		String s1= new String("Hello");
		String s2= new String("Hello");
		
		System.out.println(s1==s2);  //false 주소비교 
		System.out.println(s1.equals(s2));  //값비교 : true
		
		//3.hashCode() -자바에서 사용하는 메모리주소 
		Test t5= new Test();
		System.out.println(t5.toString());
		int hc= t5.hashCode();
		System.out.println(hc);
		System.out.println(Integer.toHexString(hc));
		
		
		//4.getClass() : 클래스 정보를 가진 Class객체 리턴
		Test t6 =new Test();
		Class c =t6.getClass();
		System.out.println(c.getName());
		System.out.println(c.getPackageName());
		System.out.println(c.getSuperclass());
		
		
	}

}
-------------------------------------------------------------------------------

public class Test {
	
		int a= 10;
}
-------------------------------------------------------------------------------

public class First {
	int num=10;
	
	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "내 마음대로 소개글 변경: " + num;
	}

}
-------------------------------------------------------------------------------

'JAVA' 카테고리의 다른 글

Generic  (0) 2023.08.30
예외처리: try-catch-finally, throws, throw  (0) 2023.07.15
인터페이스(Interface)  (0) 2023.07.15
추상클래스(abstract), 익명클래스  (0) 2023.07.15
연산자(Operator)  (0) 2023.07.15