다음 자바 코드에서 오류가 발생하는 문장은?abstract class … | [7급 국가직 소프트웨어공학] 21년 1회차 기출문제 상세 페이지
1[7급 국가직 소프트웨어공학] 21년 1회차
다음 자바 코드에서 오류가 발생하는 문장은?abstract class Shape { public void paint() { draw(); } abstract public void draw(); } abstract class Circle extends Shape { public int radius; public Circle(int radius) { this.radius = radius; } double getArea() { return (3.14 * radius * radius); } } public class NamedCircle extends Circle { String name; public NamedCircle(int radius, String name) { super(radius); this.name = name; } public void draw() { System.out.println("반지름이 " + radius + "인 원을 그리다."); } public static void main(String[] args) { Shape s; s = new Shape(); NamedCircle w = new NamedCircle(5, "Ring"); System.out.println(w.getArea()); w.draw(); } }
1
super(radius);
2
Shape s;
3
s = new Shape();
4
System.out.println(w.getArea());
해설
오류가 나는 문장은 추상 클래스 Shape를 new로 생성하는 문장이다.
abstract 클래스는 구현되지 않은 메서드(draw)를 가지므로 직접 인스턴스화할 수 없다. 다만 추상 클래스 타입의 참조 변수 선언은 가능하다.
- super(radius): Circle에 int 매개변수 생성자가 있으므로 정상 호출이다.
- Shape s: 추상 클래스 타입 참조 변수 선언은 허용된다.
- w.getArea() 출력: NamedCircle이 Circle의 getArea()를 상속받으므로 정상이며, draw도 NamedCircle에서 구현되어 객체 생성이 가능하다.
오류나 개정된 내용이 보이면 알려주세요