[JAVA] 자바 상속과 Object 클래스
▣ [JAVA] 자바 상속과 Object |
■ 상속이라는 단어는 우리가 일상생활에서도 많이 들어봤을거에요. "부모님께 재산을 상속받는다" 할때 그 상속이 맞습니다. 자바에서도 어떤 클래스 하나가 다른 클래스로부터 상속을 받아서 그 안에 있는 모든 멤버들을 자기것인것처럼 사용할 수 있는 개념이 있습니다.
■ 자바 API를 한번씩 살펴보시는지요? 어떤 클래스를 찾아서 그 상속관계를 보면 제일 위쪽에 있는 상위 클래스는 모두 [java.lang.Object] 클래스라는걸 알수 있는데요.
■ 모든 클래스들은 최상위 클래스인 Object클래스로 부터 무조건 상속을 받고 , 그 안에 있는 모든 메서드들을 아무런 제약없이 사용할 수 있습니다. 그리고 상속받은 클래스에 따로 "import"를 해주지 않아도 JVM은 자동으로 모든 클래스들이 Object를 상속받은것으로 인식하고 있습니다.
■ Object 클래스 메서드인데요. 이것들은 모든 클래스에서 아무 제약없이 사용할 수 있는것입니다. 간단하게 예제를 하나 만들어서 확인해 보겠습니다.
■ 예제를 보면 AAA클래스는 아무것도 없이 비어있는 상태이구요. Ex02 클래스에서 AAA의 객체를 생성해서 그 안에 있는 메서드들을 실행시키고 있는 모습입니다. 메서드가 없는데 어떻게 호출을 해서 실행을 시키고 있을까요?
그 이유는 위에서도 언급했듯이 모든 클래스들은 [java.lang.Object]클래스를 상속을 받기 때문에 AAA도 역시 Object클래스를 상속을 받은 상태입니다. 물론 import는 생략되어 있는거구요. 그렇기 때문에 AAA의 안에도 Object의 모든 메서들을 있다고 생각하면 되는것입니다. 때문에 객체를 만들어서 메서드들을 사용할 수 있는 것입니다.
예를 들어 AAA클래스 안에 equals()라는 메서드가 있다면 그것이 실행이 됩니다. 이것을 메서드가 "오버라이딩" 또는 "재정의"라고 합니다. 오버라이딩(Overiding)이라는 것은 상속관계에서 상위 클래스와 하위 클래스에 동일한 이름은 메서드가 있는것을 의미합니다.
하지만 위의 예에서는 해당 메서드가 없기 때문에 그 상위클래스를 찾아가서 메서드를 찾게 됩니다. 그렇게 계속 거슬러 올라가서도 해당 메서드가 없다면 그때는 에러가 발생하게 되는것입니다.