티스토리 뷰
자바의 Object 클래스란 ? 자바 API의 모든 클래스와 사용자가 정의한 모든 클래스의 최상위 클래스이다.
즉, 모든 자바 클래스들은 Object 클래스를 상속받는다.
ex ) class A extends B
A클래스는 B클래스를 상속받았으며, Object 클래스도 묵시적으로 상속받았다고 볼 수 있다.
* Object 클래스의 주요메소드
|
메소드 |
용도 |
|
boolean equals(object obj) |
두 개의 객체가 같은지 비교한다. 반환형은 boolean (true, false) |
|
String toString() |
현재 객체의 문자열을 반환한다. (오버라이딩을 사용하여 현재 객체의 초기화된 멤버변수를 알 수 있다.) |
|
Object clone() |
객체를 복사한다. |
|
Class getClass() |
객체의 클래스형을 반환한다.
|
|
void finalize() |
가비지 컬렉션 (GC) 직전에 객체의 리소스를 정리할 때 호출한다. |
|
int hashCode() |
객체의 해쉬코드값을 반환한다. |
Object 클래스에 해당하는 메소드는 더 많습니다.
이 외의 자세한 정보는 API를 확인 하시면 됩니다. Java Object API
이론을 배웠으면 실습을 통해 공부하겠습니다.
Object 클래스를 상속받은 toString(), equals() 메소드를 사용하는 메인 클래스 입니다.
public class ExampleObject{
public static void main(String[] args) {
// 1) toString
// 2) equals
A a1 = new A(10);
A a2 = new A(10); // a1을 대입할 경우 아래 if 문에서 true
String str = a1.toString();
System.out.println(a1);
System.out.println(str);
// A == B -> A와 B가 같은가? -> A의 값과 B의 값이 같은가?
if (a1 == a2) {
System.out.println("a1과 a2가 같다.");
} else if (a1.equals(a2)) {
System.out.println("equals");
} else {
System.out.println("a1과 a2가 다르다.");
}
Person p1 = new Person("A", 25, "0313");
Person p2 = new Person("A", 25, "0313");
// 동등 연산자 (==) 사용
if (p1 == p2) {
System.out.println("같은 사람");
} else {
System.out.println("다른 사람");
}
// Object 클래스의 equals 사용
// p1을 기준으로 p2를 비교하겠다.
// p2.equals(p1) => p2를 기준으로 p1을 비교
// Object 클래스에서는 기본적으로 equals 메소드를 동등 연산자와 동일하게 사용한다.
// -> 메모리 주소값 비교
// Overring을 사용하여 메소드 재정의를 통해 멤버변수 값을 비교하여 같은 사람이 된다.
if (p1.equals(p2)) {
System.out.println("같은 사람");
} else {
System.out.println("다른 사람");
}
}
}
Object 클래스로부터 상속받은 toString() 메소드를 오버라이딩한 A 클래스
public class A { // object클래스를 상속받고 있다.
private int num;
// public A(){
// System.out.println("A() 생성");
// }
public A(int num) {
this.num = num;
}
@Override
public String toString() {
String str = super.toString();
return "A [num=" + num + "]"+str;
}
}
A클래스를 상속받은 B클래스
public class B extends A {
private int num2;
// public B(){
// System.out.println("B() 생성");
// }
// 부모클래스의 생성자에 매개변수가 있으면
// 자식클래스에서 부모클래스의 매개변수까지
// 받아내어 명시적으로 부모클래스의 인스턴스를
// 만들어 내야한다.
public B(int num1, int num2) {
// super()위에 어떠한 코드가 들어가게 되면 자식클래스 생성자가 먼저 생성되어야 하므로 Error발생!
// super 키워드 위에 코드가 존재한다는 이야기는
// 부모클래스가 만들어지지도 않았는데 자식 클래스에서
// 무엇인가를 진행한다는 이야기이다. 따라서 suer키워드 위쪽 코드에는
// 어떠한 코드도 들어갈 수 없다.
// 부모클래스의 생성자에 매개변수가 없다면 super키워드를 사용하지 않아도 된다.
// System.out.println("Hello");
super(num1); // 부모클래스의 생성자 호출
}
public void goo() {
// A a= super(10); // B 클래스입장에서 기반으로 하는 클래스를 만드는 것.
// A a1 = new A(10); // 새로운 객체를 만드는 것
}
}
Object 클래스를 상속받아 toString() , equals() 메소드를 오버라이딩한 Person 클래스
public class Person {
private String name;
private int age;
private String birthday;
public Person(String name, int age, String birthday) {
this.name = name;
this.age = age;
this.birthday = birthday;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", birthday=" + birthday + "]";
}
@Override
public boolean equals(Object obj) {
Person temp = (Person) obj;
boolean equals_condition = (this.age == temp.age) && (this.name.equals(temp.name))
&& (this.birthday == temp.birthday);
return equals_condition;
}
}
'프로그래밍 > Java' 카테고리의 다른 글
| 자바 ! 예외처리 ( Exception , try ~ catch ~ finally) (0) | 2017.05.08 |
|---|---|
| 자바 ! 다형성 ( Polymorphism , Upcasting , Downcasting ) (0) | 2017.05.05 |
| 자바 ! 인터페이스 (interface) (0) | 2017.04.30 |
| 자바 ! 오버라이딩, 추상클래스 (overriding, abstract) (1) | 2017.04.26 |
| 자바 ! 생성자 오버로딩과 this 키워드 (0) | 2017.04.25 |
