728x90
반응형
2020년 3회 정보처리기사 실기 기출문제
문제
다음은 자바 코드이다. 출력 결과를 쓰시오.
abstract class Vehicle {
private String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
public void setName(String val) {
name = val;
}
}
class Car extends Vehicle {
public Car(String val) {
setName(val);
}
public String getName(String val) {
return "Car name: " + val;
}
public String getName(byte val[]) {
return "Car name: " + val;
}
}
public class Good {
public static void main(String[] args) {
Vehicle obj = new Car("Spark");
System.out.print(obj.getName());
}
}
정답
Vehicle name: Spark
반응형
해설
📌 1. main() 메서드 실행
public class Good {
public static void main(String[] args) {
Vehicle obj = new Car("Spark");
System.out.print(obj.getName());
}
}
- new Car("Spark")를 통해 Car 객체를 생성합니다.
- Car 생성자에서 setName("Spark")를 호출하여 Vehicle 클래스의 name 변수에 "Spark"를 저장합니다.
- obj는 Vehicle 타입의 참조 변수이지만, 실제로는 Car 객체를 참조하고 있습니다.
- obj.getName() 호출 시, Vehicle 클래스의 getName() 메서드가 호출됩니다.
이유는 Vehicle 클래스에 이미 getName() 메서드가 구현되어 있으며, 이 메서드는 오버라이딩되지 않았기 때문입니다.
📌 2.Vehicle의 getName()
abstract class Vehicle {
private String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
public void setName(String val) {
name = val;
}
}
- 이 메서드는 name 변수의 값을 사용해 문자열을 반환합니다.
- name 변수에는 "Spark" 값이 저장되어 있으므로, **"Vehicle name: Spark"**를 반환합니다.
📌 3. 왜 Vehicle 클래스의 getName()이 호출되었나?
3.1 오버라이딩되지 않은 이유
- Car 클래스에는 getName(String val)과 getName(byte[] val)이 오버로딩된 메서드로 정의되어 있지만, 매개변수 없는 getName()은 없습니다.
- 따라서 부모 클래스(Vehicle)의 매개변수 없는 getName() 메서드가 호출됩니다.
3.2 오버로딩과 오버라이딩의 차이
- 오버로딩:
- 같은 이름의 메서드를 매개변수의 타입이나 개수를 다르게 정의.
- 문제에서 Car 클래스의 getName(String val)과 getName(byte[] val)이 이에 해당.
- 오버라이딩:
- 부모 클래스의 메서드를 동일한 이름, 매개변수, 반환 타입으로 재정의.
- 문제에서 매개변수 없는 getName() 메서드는 오버라이딩되지 않았기 때문에 부모 메서드가 호출됨.
📌 4. 핵심 요약
- 생성자
- Car 클래스의 생성자는 부모 클래스의 setName() 메서드를 호출하여 name 변수 값을 "Spark"로 초기화.
- 오버라이딩
- getName(String val)은 오버로딩된 메서드이므로, 매개변수 없는 getName()과는 관계가 없습니다.
- 매개변수 없는 getName() 메서드는 오버라이딩되지 않았으므로 부모 클래스 메서드가 호출됩니다.
- 출력 결과
- 부모 클래스의 getName() 메서드가 호출되어 "Vehicle name: Spark" 출력.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
728x90
반응형
'코딩일기 > 자격증' 카테고리의 다른 글
[정보처리기사]| 생성자(Constructor) | 2020년 3회 정보처리기사 실기 기출문제 (0) | 2024.11.25 |
---|---|
[정보처리기사] [Java] while문과 continue의 활용| continue와 break의 차이점 | 2020년 3회 정보처리기사 실기 기출문제 (0) | 2024.11.23 |
[정보처리기사] 스키마 (Schema) | 내부스키마, 개념스키마, 외부스키마 | 정보처리기사 기출문제 (0) | 2024.11.19 |
[정보처리기사] [ C ] 함수 호출과 반환값 | 2020년 3회 정보처리기사 기출문제 (0) | 2024.11.16 |
[정보처리기사] 프로그래밍 표기법 정리 | 카멜, 파스칼, 스네이크, 헝가리안 표기법 | 정보처리기사 실기 기출문제 (0) | 2024.11.13 |