정답
String name; int number; or public String name; public int number; or protected String name; protected int number;
해설
접근 제한자는 public, protected, private, 생략(default) 이렇게 네 가지입니다. private은 자기 자신만 접근할 수 있는 접근 제한자로 Car 클래스의 private한 요소들은 Car 클래스에서만 사용 가능합니다. CarExam은 Car와 다른 클래스이므로 접근하려는 요소가 private이면 접근할 수 없는 것입니다. 접근 제한자를 생략하면 같은 패키지에 존재하는 객체는 접근할 수 있습니다. protected는 패키지가 같을 때는 물론이고, 패키지가 다르다 하더라도 두 객체 사이가 상속 관계라면 접근할 수 있습니다. public은 어떤 클래스든 모두 접근할 수 있습니다. 그러므로 Car 클래스와 CarExam 클래스가 같은 패키지에 있다고 가정하면 접근 제한자를 생략한 package 영역, public, protected 세 가지 접근 제한자가 모두 가능합니다.
문제 2 접근 제한자는 필드와 마찬가지로 메서드에도 적용할 수 있습니다. CarExam 클래스가 실행되도록 수정해보세요.
package javaStudy; public class Car{ public void run() { System.out.println("차가 달립니다."); } private void stop() { System.out.println("차가 멈춥니다."); } }
package javaStudy; public class CarExam{ public static void main(String[]args) { Car car = new Car(); car.run(); car.stop(); } }
실행결과
차가 달립니다. 차가 멈춥니다.
정답
public void stop() { System.out.println("차가 멈춥니다."); }
해설
private한 접근 제한자는 자기 클래스 내에서만 사용할 수 있으므로 외부에서 stop 메서드를 사용할 수 있도록 stop 메서드의 접근 제한자를 수정합니다. 두 클래스가 같은 패키지인지 아닌지 등의 구체적인 상황에 따라서 알맞은 접근 제한자로 수정하면 됩니다.