반응형
2023 정보처리기사 실기 1회 17번
문제
17. 자바 코드 출력 값 작성.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
abstact class Vehicle {
String name;
abstract public String getName(String val);
public String getName() {
return "Vehicle name: " + name;
}
}
class Car extends Vehicle {
public Car(String val) {
name=super.name=val;
}
public String getName(String val) {
return "Car name:" + val;
}
public String getName(byte val[]) {
return "Car name:" + val;
}
}
public class Main {
public static void main(String[] args) {
Vehicle obj = new Car("Spark");
System.out.println(obj.getName());
}
}
|
cs |
정답
Vehicle name: Spark
해설
main 메소드 내에서, "Spark"라는 이름으로 Car 인스턴스가 생성된다. 이 인스턴스는 Vehicle 참조인 obj로 참조된다.
- Vehicle obj = new Car("Spark");는 이름이 "Spark"로 초기화된 Car의 새 인스턴스를 생성한다. Car 클래스의 생성자는 이 값을 슈퍼클래스 Vehicle의 name 필드에 할당한다.
- System.out.println(obj.getName());는 이 인스턴스에 대해 getName() 메소드를 호출한다. 인자가 제공되지 않았으므로, Car 클래스에서 인자가 필요한 getName(String val) 메소드는 호출되지 않고, getName(byte[] val)도 마찬가지로 적용되지 않으므로 (Car에서 요구하는 바이트 배열이 아니기 때문에), Vehicle 클래스의 매개변수 없는 getName() 메소드가 호출된다.
- 여기서 핵심은 매개변수 없이 Vehicle 클래스에서 getName() 메소드가 호출되며, 이는 "Vehicle name: " 문자열과 name 필드의 값인 "Spark"가 연결된 결과를 반환한다.
2023 정보처리기사 실기 1회 20번
문제
20. 자바 코드 출력 값 작성.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
class Parent {
int x = 100;
Parent() {
this(500);
}
Parent(int x) {
this.x = x;
}
int getX() {
return x;
}
}
class Child extends Parent {
int x = 4000;
Child() {
this(5000);
}
Child(int x) {
this.x = x;
}
}
public class Main {
public static void main(String[] args) {
Child obj = new Child();
System.out.println(obj.getX());
}
}
|
cs |
정답
500
해설
- Child 클래스의 인스턴스 obj가 기본 생성자 Child()를 사용하여 생성된다.
- Child의 기본 생성자는 this(5000);을 호출하여 같은 클래스의 다른 생성자 Child(int x)를 호출한다.
- Child(int x) 생성자는 this.x = x;를 통해 Child 클래스의 x 필드에 5000을 할당한다. 여기서의 this.x는 Child 클래스 내부의 x를 가리킨다.
- Child 클래스의 생성자 내에서 Parent 클래스의 생성자는 명시적으로 호출되지 않으므로, Child 클래스 객체가 생성될 때 Parent 클래스의 기본 생성자 Parent()가 자동으로 호출된다.
- 그러나 Parent의 기본 생성자는 this(500);을 사용하여 같은 클래스의 다른 생성자 Parent(int x)를 호출한다. 따라서 Parent 클래스의 x 필드는 500으로 설정된다.
- System.out.println(obj.getX());는 getX() 메서드를 호출한다. 이 메서드는 Parent 클래스에 정의되어 있으며, Parent 클래스의 x 필드 값을 반환한다.
결론적으로, obj.getX()는 Parent 클래스의 x 값을 반환한다. Parent 클래스의 x는 생성자를 통해 500으로 설정되었다. 따라서 프로그램의 출력값은 500이 된다.