본문 바로가기

Java

Java- Object 클래스

모든 클래스는 Object 클래스를 상속한다.

  클래스를 정의시 어떠한 클래스도 상속하지 않는다면 해당 클래스는 Object 클래스를 상속하게 된다.

 

예를들어...

class AAA{}  ..(1) 

class AAA extends Objects{}  ..(2)

(1)과 (2)는 동일하다.  

 

 그리고 다른 클래스를 상속받는 서브클래스들도 부모 클래스는 상속을 받지 않았으므로 간접적으로 Objects 클래스를 상속받게 된다.

 

 Object 클래스를 상속받는 목적

  그렇다면 Object 클래스를 상속받는 이유는 뭘까? 이는 자바의 모든 인스턴스에 공통된 기준 및 규약을 적용하기 위함이다. 우리가 사용하는 System.out.println 메소드의 매개변수 자료형을 보면 알 수 있다.

 

"public void println(object x)" 해당 메소드의 매개변수의 자료형이 Object인 것을 확인할 수 있다. 그렇다. 모든 인스턴스의 위에는 Object 클래스가 존재하고, println 메소드는 toString을 호출한다.

 그렇다. 지금껏 우리는 Object의 toStirng을 오버라이딩하여 사용한 것이다. 

class Cake{
    public String toString(){  //Object 클래스의 메소드 오버라이딩
        System.out.println(super.toString());  //Object 클래스가 문자열 반환
        return "this is Cake class";
    }
}
class CheeseCake extends Cake{  //Cake 클래스의 메소드 오버라이딩
    public String toString(){
        return "this is CheeseCake";
    }
}

public class ObjectClassStudy {
    public static void main(String[] args) {
        System.out.println(new Cake());
        System.out.println(new CheeseCake());
    }
}

Cake@75b84c92
this is Cake class
this is CheeseCake

   3줄 요약

  1. 모든 클래스는 Object 클래스를 상속받는다.  따라서, 모든 인스턴스는 Object 인스턴스로 오버라이딩 가능하다.
  2. println(Object x) 메소드는 인스턴스의 toString을 호출한다.
  3. 모든 인스턴스의 toString은 Object의 toString을 오버라이딩하여 사용한 것이다.

 

상속과 오버라이딩 방지 (final 키워드)

 클래스의 상속 방지

  클래스의 상속을 원치 않는다면 final 선언을 하면 된다.

 

final class AAA{}
//class BBB extends AAA{}  //final 키워드 때문에 상속 불가

 

 메소드 오버라이딩 방지

  메소드의 오버라이딩을 원치 않는다면 final 선언을 하면 된다.

class AAA{
    public final void func(){
        System.out.println("AAA");
    }
}

class BBB extends AAA{
   /*
    public void func(){  //final 선언때문에 오버라이딩 불가능
        System.out.println("BBB");
    }
    */
}

'Java' 카테고리의 다른 글

Java- 인터페이스와 추상클래스 비교  (0) 2023.01.01
Java- interface  (0) 2022.12.30
Java- 상속  (0) 2022.12.29
Java- 배열  (0) 2022.12.27
Java- 콘솔 입출력  (0) 2022.12.27