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 |