어제 오늘 내일

[Java] 자식 클래스 호출 본문

IT/Java

[Java] 자식 클래스 호출

hi.anna 2025. 12. 22. 00:18

Java에서 자식 클래스 호출이라는 표현은 보통 다음 두 가지 상황을 의미합니다:

  1. 자식 클래스 객체를 생성하여 사용하는 것
  2. 부모 타입으로 자식 객체를 다루는 것(다형성)

이 글에서는 자식 클래스를 어떻게 호출하고 사용하는지 예제 중심으로 정리합니다.

 

1. 자식 클래스 객체 생성(일반 호출)

자식 클래스는 부모 클래스를 상속받아 만들어집니다.
따라서 자식 객체를 만들면 부모의 기능도 함께 사용할 수 있습니다.

예:

class Parent {
    void hello() {
        System.out.println("부모 hello");
    }
}

class Child extends Parent {
    void bye() {
        System.out.println("자식 bye");
    }
}

public class Main {
    public static void main(String[] args) {
        Child c = new Child(); // 자식 클래스 호출(생성)
        c.hello(); // 부모 메서드 사용 가능
        c.bye();   // 자식 메서드 사용
    }
}

출력:

부모 hello
자식 bye

설명

  • new Child()로 자식 클래스가 호출(생성)
  • 부모 기능 + 자식만의 기능 모두 사용 가능

 

2. 부모 타입으로 자식 객체 호출(다형성)

Java의 상속에서는 부모 타입으로 자식 객체를 참조할 수 있습니다.
이것이 다형성(Polymorphism)의 핵심입니다.

Parent p = new Child(); // 부모 타입으로 자식 객체 호출
p.hello();              // 부모 메서드 호출 가능

주의

  • 부모 타입으로 참조할 경우 자식만의 메서드(bye)는 호출할 수 없음
  • p.bye(); // ❌ 컴파일 오류

설명

  • Child 객체가 실제로 생성되지만 Parent 타입으로 묶여 부모 기능만 접근 가능

 

3. 오버라이딩된 메서드 호출

자식 클래스가 부모의 메서드를 오버라이딩한 경우, 부모 타입으로 호출해도 자식의 메서드가 실행됩니다.

class Parent {
    void hello() {
        System.out.println("부모 hello");
    }
}

class Child extends Parent {
    @Override
    void hello() {
        System.out.println("자식 hello");
    }
}

Parent p = new Child();
p.hello(); // 자식 hello

출력:

자식 hello

설명

  • 타입이 Parent여도, 실제 객체는 Child이므로 자식 메서드 실행

 

4. instanceof로 자식 클래스 확인 후 호출

부모 타입 변수로 자식 객체를 다루는 경우, 다운캐스팅을 통해 자식 기능을 사용할 수 있습니다.

Parent p = new Child();

if (p instanceof Child) {
    Child c = (Child) p; // 다운캐스팅
    c.bye();             // 자식 메서드 호출 가능
}

출력:

자식 bye

설명

  • instanceof로 타입 확인 후 캐스팅해야 안전함

 

5. 정리

  • 자식 클래스는 new 자식클래스()로 직접 호출하여 객체 생성
  • 자식 객체는 부모 기능을 모두 사용할 수 있음
  • 부모 타입으로 자식 객체를 호출하면 부모 기능만 접근 가능 (다형성)
  • 오버라이딩된 메서드는 부모 타입으로 호출해도 자식 메서드 실행
  • 필요하면 다운캐스팅을 통해 자식 메서드를 다시 사용할 수 있음

 

 

반응형
Comments