코딩일기/자격증
[정보처리기사] [Java] 상속과 오버라이딩 | 2024년 1회 정보처리기사 실기 기출문제
jhy_2023
2025. 4. 7. 13:16
728x90
반응형
2024년 1회 정보처리기사 실기 기출문제
문제
다음 Java 코드를 실행했을 때 출력 결과를 쓰시오.
class classOne {
int a, b;
public classOne(int a, int b) {
this.a = a;
this.b = b;
}
public void print() {
System.out.println(a + b);
}
}
class classTwo extends classOne {
int po = 3;
public classTwo(int i) {
super(i, i+1);
}
public void print() {
System.out.println(po * po);
}
}
public class main {
public static void main(String[] args) {
classOne one = new classTwo(10);
one.print();
}
}
정답
9
반응형
해설
1️⃣ 클래스 구조와 상속 관계
class classTwo extends classOne
class classOne {
int a, b;
public classOne(int a, int b) {
this.a = a;
this.b = b;
}
public void print() {
System.out.println(a + b);
}
}
- 자식 클래스가 부모 클래스의 속성(필드)과 기능(메서드)을 물려받는 것을 상속(Inheritance) 이라고 합니다.
- 자바에서는 extends 키워드를 사용해 상속을 구현합니다.
- classTwo는 classOne을 상속받은 클래스이므로, 부모 클래스의 a, b 필드와 print() 메서드를 물려받습니다.
- 단, 자식 클래스에서 print() 메서드를 오버라이딩(Overriding) 하면, 자식 클래스의 메서드가 우선적으로 사용됩니다.
2️⃣ main 메서드와 다형성
public class main {
public static void main(String[] args) {
classOne one = new classTwo(10);
one.print();
}
- 이 코드는 자식 클래스인 classTwo 객체를 부모 클래스 타입인 classOne 변수에 담은 것입니다. 이를 업캐스팅(Upcasting) 이라고 합니다.
- 즉, 변수 one의 타입은 classOne이지만, 실제 생성된 객체는 classTwo입니다.
- print() 메서드는 classTwo에서 오버라이딩 되어 있습니다. 즉, 부모 클래스에도 같은 이름의 메서드가 존재하지만, 자식 클래스에서 재정의한 메서드가 실행됩니다.
- 자바에서는 메서드 호출 시 변수의 타입이 아닌, 실제 객체의 타입을 기준으로 메서드를 실행합니다. 따라서 one.print();를 실행하면 classTwo의 print()가 호출됩니다.
728x90
3️⃣ classTwo 클래스 내부 동작
class classTwo extends classOne {
int po = 3;
public classTwo(int i) {
super(i, i+1);
}
public void print() {
System.out.println(po * po);
}
- classTwo는 int po = 3이라는 새로운 필드를 정의하고 있습니다.
- 생성자에서 super(i, i + 1);을 통해 부모 클래스의 생성자를 호출합니다. 예를 들어 i = 10이면 a = 10, b = 11이 됩니다.
- 그러나 이 문제에서 중요한 건 print() 메서드가 자식 클래스에서 오버라이딩 되었다는 점입니다.
- classTwo의 print()는 po * po를 출력하므로, po = 3일 때 3 * 3 = 9가 출력됩니다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형