다형성 (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();
}
}
이 코드를 실행하면 다음과 같은 일이 발생합니다:
- SuperObject a = new SubObject();로 인해 a는 SubObject 객체를 참조합니다.
- 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"가 출력됩니다.
- super.paint();가 호출되어 SuperObject 클래스의 paint 메소드가 실행됩니다.
- SubObject 클래스의 paint 메소드가 호출됩니다.
- a.draw();를 호출하면:
- SubObject 클래스의 draw 메소드가 호출됩니다.
- System.out.print("D");가 실행되어 "D"가 출력됩니다.
- SubObject 클래스의 draw 메소드가 호출됩니다.
따라서, 전체 실행 결과는 "BDCDD"가 됩니다.