Java

[Java] 상속과 Object 클래스

junga 2022. 9. 9. 23:10

상속


  • 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다.
  • 상속을 이용하면 기존 클래스의 모든 필드와 메소드를 물려받아, 새로운 클래스를 생성할 수 있다.
  • 기존 클래스를 부모 클래스(parent class)라고 하며,
  • 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class)라고 한다.
class 자식클래스이름 extend 부모님클래스 이름 {...}


http://www.tcpschool.com/java/java_inheritance_concept

위 사진을 보면 부모클래스는 자식클래스에 포함돼있다.
자식클래스에는 부모클래스의 필드와 메소드만이 상속되며, 생성자와 초기화 블록은 상속되지 않는다.
아래 코드를 통해 필드, 메소드 상속과 생성자에 대하여 알아보자.

class Parent {
    private int a = 100;
    public int b = 200;
    int c = 300;

    Parent() {
        System.out.println("부모클래스 생성자 호출");
    }
}


class Child extends Parent {
    int d = 400;

    Child() {
        System.out.println("자식클래스 생성자 호출");
    }

    void print() {
        // 부모+자식클래스 필드 사용
        // System.out.println(a); private이므로 에러 발생
        System.out.println(b);
        System.out.println(c);
        System.out.println(d);
    }
}


public class Main {
    public static void main(String[] args) {
        Child ch = new Child();
        ch.print();
        // 부모클래스 생성자 호출 => 부모 객체 먼저 생성 후, 자식 객체가 생성이 된다.
        // 자식클래스 생성자 호출 => 생성자는 상속받지 않는다.
        // 200
        // 300
        // 400
    }
}


부모클래스 생성자에 매개변수가 있으면 어쩌나?

  • 결론적으로 자식클래스를 인스턴스화할 때 부모생성자를 자동으로 호출할 수 없으며 에러가난다.
  • super()를 사용하면 부모생성자 호출이 가능하다.
class Parent {
    Parent(String str) {
        System.out.println("super()로 " + str + " 생성자 호출");
    }
}

class Child extends Parent {
    int d = 400;

    Child() {
        super("부모클래스");
        System.out.println("자식클래스 생성자 호출");
    }
}


public class Main {
    public static void main(String[] args) {
        Child ch = new Child();
        // super()로 부모클래스 생성자 호출
        // 자식클래스 생성자 호출
    }
}

super()에 대한 글은 따로 자세히 쓸 거다.
일단 대충 어떻게 쓰는진 알 거 같다.

Object 클래스


  • 쉽게 말하면 모든 클래스의 부모 클래스가 되는 클래스이다.
  • 즉, 자바의 모든 클래스는 extends키워드 사용 없이 Object클래스의 모든 필드와 메소드를 상속받게 된다.
  • toString(), clone()과 같은 메소드를 바로 사용할 수 있는 이유는 해당 메소드들이 Object클래스의 메소드이기 때문이다.

'Java' 카테고리의 다른 글

[Java] 오버로딩 & 오버라이딩  (0) 2022.09.10
[Java] 클래스 상속관계와 포함관계 차이  (0) 2022.09.09
[Java] 접근 제어자  (0) 2022.09.08
[Java] JVM 구조  (0) 2022.09.08
[Java] 클래스 메서드와 인스턴스 메서드  (0) 2022.09.07