Object 클래스
자바에서 모든 클래스는 Object 라는 클래스를 확장한 것이다.
명시적으로 다른 클래스를 확장하지 않은 클래스는 자동으로 Object를 확장한 클래스로 정의 된다.
Object 유형의 객체를 만들수는 있지만 실제로 만들 일은 별로 없다.
새로 만드는 클래스는 무조건 Object 클래스의 모든 메소드를 상속 받게 된다.
1) equals(Object o)
Dog a= new Dog();
Cat c = new Cat();
if(a.equals(c)) {
System.out.println("ture");
} else {
System.out.println("false");
}
- 두 객체를 '같은' 것으로 볼수 있을지 판단하는 메소드
2) getClass()
Cat c = new Cat();
System.out.println(c.getClass());
- 어떤 클래스의 인스턴스인지 알 수 있도록 그 객체의 클래스를 리턴
3) hashCode()
Cat c = new Cat();
System.out.println(c.hashCode());
- 그 객체에 해당하는 해시코드를 출력
4) toString()
Cat c = new Cat();
System.out.println(c.toString());
- 클래스명과 몇가지 별로 잘 쓰이지 않는 숫자가 포함된 String메시지를 출력
Object 유형의 다형적 레퍼런스
//Dog로 집어넣도록 하고 Dog로 저장하고 나중에 꺼낼때도 Dog가 된다.
ArrayList<Dog> myDogArrayList = new ArrayList<Dog>();
//Dog 객체를 저장하도록 선언된 ArrayList 생성
Dog aDog = new Dog(); //Dog 객체 생성
myDogArrayList.add(aDog); //Dog객체를 목록에 추가
Dog d = myDogArrayList.get(o); //목록에 들어있는 Dog를 새로운 Dog레퍼런스 변수에 대입
ArrayList<Dog>라고 했기 때문에
get()메소드의 리턴 유형도 Dog로 선언되었다.
ArrayList<Object> myDogArrayList = new ArrayList<Object>();
//Dog 객체를 저장하도록 선언된 ArrayList 생성
Dog aDog = new Dog(); //Dog 객체 생성
myDogArrayList.add(aDog); //Dog객체를 목록에 추가
>Dog d = myDogArrayList.get(o); // error
get()메소드의 리턴형도 Object가 된다.
모든것을 다형적인 Object유형으로 처리하면 객체가 그 객체의 성질을 잊어버린 것 같이 보인다.
그 객체의 특성을 잃는다.
Object 유형으로 선언된 변수로 참조되는 객체를 실제 객체의 유형으로 선언된 변수에 대입할 수 없다.