제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다.
제어자의 종류는 접근 제어자와 그 외의 제어자로 나눌 수 있다.
public, protected, default, private
static, final, abstract, native, transient, synchronized, volatile, strictfp
제어자는 클래스나 멤버변수와 메서드에 주로 사용된다.
하나의 대상에 대해서 여러 제어자를 조합하여 사용하는 것이 가능하다.
단 접근 제어자는 한 번에 하나만 선택해서 사용한다.
제어자의 조합
제어자를 조합할해서 사용할 때 다음 사항을 주의해야한다.
- 메서드에 static과 abstarct를 함께 사용할 수 없다
- static 메서드는 몸통이 있는 메서드에만 사용할 수 있다.
- 클래스에 abstract와 final을 동시에 사용할 수 없다
- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미다.
- abstract는 상속을 통해서 완성되어야 한다는 의미다.
- 이 둘은 서로 모순된다.
- abstract 메서드의 접근 제어자가 private일 수 없다
- abstract 메서드는 자식 클래스에서 구현해주어야 한다.
- 접근 제어자가 private이면 자식 클래스에서 접근할 수 없다.
- 메서드에 private과 final을 같이 사용할 필요는 없다
- 접근 제어자가 private인 메서드는 오버라이딩 될 수 없다.
- 둘 중 하나만 사용해도 의미가 충분하다.