본문 바로가기
Java

Java Object class

by 히예네 2023. 2. 6.
728x90
반응형

Object class : 모든 Java class의 최상위 class

명시적으로 상속하지 않아도 기본 상속되어있다. 객체라면 반드시 갖고있었으면 좋을거같은 기능이 들어있다. 

 

Object

Test

 

다중상속은 불가능하지만 Object는 처음부터 상속 받게된다. 

 

Object

First

Second

Test

 

 

 

 

 

나는 Test클래스에 int a=10; 멤버변수하나만 만들었는데 ... 메인함수에서 찍어보면 [a : int - Test ] 이외 다른 기능들이

엄청 많이 들어가있다. 

왜 ?? Test클래스는 명시적으로 아무것도 상속하지 않았지만 기본적으로 Object클래스를 상속받은 상태이다

 

 


Object클래슥가 가진 주요 메소드

1. toString()

Test t=new Test();
		//Test클래스는 명시적으로 아무것도 상속하지 않았지만 기본적으로 Object클래스를 상속받은 상태이다
		t.toString(); //이런 메소드를 가지고 있음.

//1)toString() : 객체에 대한 소개 문자열을 리턴해주는 기능메소드
		String s=t.toString(); //너에 대한 설명을 문자열로줘라
		System.out.println(s); //[default : "클래스명@해시코드"]
		
		//해시코드 : 메모리 물리주소를 상대적인 주소로 표현한 숫자(자바에서의 주소)
		
		 Test t2=new Test();
		 String s2=t2.toString();
		 System.out.println(s2); //t와 해시코드가 다르기에 다른 객체임 
		 
		 Test t3=t2; //t2가 갖는 주소를 보낸것임
		 
		 String s3=t3.toString();
		 System.out.println(s3); //t2와 같은 객체를 공유하기에 같은 해시코드 
		 
		 //당연히 Java System API 2000여개도 toString()을 보유하고 있음.
		 
		 //에러!  Random rnd; 왜 ? 패키지가 다르니까 임포트해줘야함
		 Random rnd=new Random();
		 String s4=rnd.toString();
		 System.out.println(s4); //[default : "패키지명.클래스명@해시코드"]
		 
		
		//.toString()의 특이한 결과 
		 String name=new String("sam"); //()안에 생성자를 전달한다.
		 String s5=name.toString();
		 System.out.println(s5); //객체소개글이 아니라 문자열데이터가 나옴 
		//원래의 toString()기능으로 동작하지 않았다는것은 메소드를 오버라이드하여 기능을 개선했다는 것이다. 
		
		 //즉, Object 클래스의 메소드들도 기능개선 (오버라이드)가 가능하다
		
		 First f=new First();
		 //퍼스트객체의 멤버값을 출력해보기 위해.. 
		 //toString()의 기능을 개선..
		 System.out.println(f.toString());

2. equals(Object obj)

//2) equals(Object obj) 같은 객체인지를 확인하는메소드
		 Test t4=new Test();
		 Test t5=new Test();
		 boolean bb=t4.equals(t5); //같은지 여부를 true/false로 리턴해줌
		 
		 System.out.println(bb);
		 
		 Test t6=t5;
		 System.out.println(t6.equals(t5));
		 
		 //사실 같은 객체인지를 판별할때 equals()메소드를 잘 사용하지 않음.
		 //why? 참조변수의 주소값끼리 비교연산이 가능하므로 
		 System.out.println(t6==t5);
		 System.out.println(t6==t4); //이게 더편함

		 //equal()도 상속 받은 메소드니까 .. 오버라이드 할 수 있다. 
		 //멤버값끼리 서로 같은지를 비교하여 결과를 리턴해주는 기능으로 개선해보기
		 
		 First f1=new First();
		 First f2=new First();
		 
		 f1.num=100;
		 f2.num=200;
		 System.out.println(f1.equals(f2)); //멤버값 비교 
 		 
		 
		 //이렇게 오버라이드된 대표적인 클래스 바로 String이다
		 String s6=new String("Hello");
		 String s7=new String("Hello");
		 System.out.println(s6==s7); //주소비교 
		 System.out.println(s6.equals(s7)); //값 비교: true 
		 //==는쓰지말고 equals로 문자열비교이다
		 
		 System.out.println();

3. getClass()

//3) getClass 우리는 잘 안쓸거같아 클래스의 정보를 가진 Class객체를 리턴해줌.
		 //Class라는 클래스가 있다  public class Class  대소문자구별
		 Test t7=new Test();
		 Class obj=t7.getClass(); //클래스 이름이 Class이다
		 System.out.println(obj.getName()); //클래스명
		 System.out.println(obj.getPackageName()); //패키지명 디폴트값이라서 비어있음
		 System.out.println(obj.getSuperclass()); //부모클래스
		 System.out.println();

 

4. hashCode()

//4)HashCode() : 자바에서의 주소값 [객체마다 고유한 번호 부여]
		 Test t8=new Test();
		 int hashcode= t8.hashCode();
		 System.out.println(hashcode); //10진수
		 System.out.println(t8.toString()); //16진수
		 System.out.println(Integer.toHexString(hashcode));
		 
		 System.out.println();

//Object class를 사용하는 대표적인 상황
		 //업캐스팅 : 부모참조변수로 자식객체를 참조하는 것 
		 Object obj2=null; //아무도 참조하고 싶지 않아
		 //Object는 모든 클래스의 최상위 부모 클래스이므로
		 //어떤 클래스의 객체든 모두 참조하는것이 가능함
		 obj2=new Test();
		 obj2=new First();
		 obj2=new String();
		 obj2=new Random();
		 obj2=new int[5];
		 obj2=new ArrayList<String>();
		 
		 //만능 참조변수같은 느낌 - 참조는 가능하나 자식의 기능을 다 쓸수없다
		 
		 //업캐스팅은 메소드의 파라미터나 리턴에도 사용가능함.
		 //어떤 객체든 파라미터로 받고 싶을때 Object를 사용하기도 함
		 //대표적인 사용예 )System.out.println(Object X)
		 //오브젝트가 없엇으면 우리가 만든 클래스는 불러올수 없엇을것이다. 
		 System.out.println(new Random());
		 System.out.println(new Test());
		 System.out.println(new String("aa"));
		 
		 Person p=new Person();
		 p.setName("sam");
		 //이름만 출력하고싶어
		 System.out.println(p.getName());
		 
		 
		 Person p2=new Person("robin",20,"Seoul");
	     //멤버변수를 하나하나 별도로 설정하는 기능도 ☆필수로 요청됨

5. wait(),notify(),notifyAll() - 스레드를 배워야함

728x90
반응형

'Java' 카테고리의 다른 글

Java Polymorphism(다형성)  (0) 2023.02.06
Java Interface(인터페이스)  (0) 2023.02.05
java abstract  (0) 2023.01.30
java Final  (0) 2023.01.29
java 오버라이드(Override)  (0) 2023.01.29