본문 바로가기

카테고리 없음

자바 - 다형성과 오버라이딩의 작동 방식

 

다형성 (Polymorphism)

다형성은 객체 지향 프로그래밍(OOP)의 핵심 개념 중 하나로, 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다. 자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다.

 

오버라이딩 (Overriding)

오버라이딩은 부모 클래스에 정의된 메소드를 자식 클래스에서 재정의하는 것을 의미합니다. 오버라이딩을 통해 자식 클래스는 부모 클래스의 기본 동작을 대체하거나 확장할 수 있습니다.

 

 

정보처리기사 2023년 3회 JAVA 문제

class SuperObject {
    public void draw() {
        System.out.println("A");
        draw();
    }

    public void paint() {
        System.out.print("B");
        draw();
    }
}

class SubObject extends SuperObject {
    public void paint() {
        super.paint();
        System.out.print("C");
        draw();
    }

    public void draw() {
        System.out.print("D");
    }
}

public class Test {
    public static void main(String[] args) {
        SuperObject a = new SubObject();
        a.paint();
        a.draw();
    }
}

 

이 코드를 실행하면 다음과 같은 일이 발생합니다:

  1. SuperObject a = new SubObject();로 인해 a는 SubObject 객체를 참조합니다.
  2. a.paint();를 호출하면:
    • SubObject 클래스의 paint 메소드가 호출됩니다.
      • super.paint();가 호출되어 SuperObject 클래스의 paint 메소드가 실행됩니다.
        • System.out.print("B");가 실행되어 "B"가 출력됩니다.
        • draw();가 호출됩니다. 이때 다형성(polymorphism)에 의해 실제 객체 타입인 SubObject의 draw 메소드가 호출됩니다.
          • System.out.print("D");가 실행되어 "D"가 출력됩니다.
      • System.out.print("C");가 실행되어 "C"가 출력됩니다.
      • draw();가 다시 호출됩니다. 이 또한 SubObject의 draw 메소드를 호출합니다.
        • System.out.print("D");가 실행되어 "D"가 출력됩니다.
  3. a.draw();를 호출하면:
    • SubObject 클래스의 draw 메소드가 호출됩니다.
      • System.out.print("D");가 실행되어 "D"가 출력됩니다.

따라서, 전체 실행 결과는 "BDCDD"가 됩니다.