(default는 아무것도 안적힌 기본 상태일때를 말함)
제어자 | 같은 클래스 | 같은 패키지 | 자손 클래스 | 전체 |
public [공용멤버] | O | O | O | O |
protected | O | O | O | |
default [패키지멤버] | O | O | ||
private [전용멤버] | O |
// 제어자 + [class/변수/메서드/생성자]
Class | 인스턴스 생성 제어 / 클래스를 다른클래스가 사용하게 하거나 못하게 하거나를 제어 |
변수 | 변경, 참조, 읽기 제어 |
메서드 | 호출 제어 |
생성자 | 인스턴스 생성 제어 |
// 제어자의 조합
대상 | 사용가능한 제어자 |
클래스 | public, (default), final, abstract |
메서드 | 모든 접근 제어자, final, abstract, static |
멤버변수 | 모든 접근 제어자, final, static |
지역변수 | final |
1. 메서드에 static과 abstract를 함께 사용할 수 없다.
- static메서드는 몸통(구현부)이 있는 메서드에만 사용할 수 있기 때문이다.
2. 클래스에 abstract와 final을 동시에 사용할 수 없다.
- 클래스에 사용되는 final은 클래스를 확장할 수 없다는 의미이고, abstract는 상속을 통해서 완성되어야 한다는 의미이므로 서로 모순되기 때문이다.
3. abstract메서드의 접근제어자가 private일 수 없다.
abstract메서드는 자손클래스에서 구현해주어야 하는데 접근 제어자가 private이면, 자손클래스에서 접근할 수 없기 때문이다.
4. 메서드에 private과 final을 같이 사용할 필요는 없다.
- 접근 제어자가 private인 메서드는 오버라이딩될 수 없기 때문이다. 이 둘 중 하나만 사용해도 의미가 충분하다.
~예제~
'JAVA > basic' 카테고리의 다른 글
상속 / extends (0) | 2020.10.15 |
---|---|
[Singleton] 싱글톤 / 싱글턴 패턴 (0) | 2020.10.15 |
getter / setter (0) | 2020.10.15 |
import (0) | 2020.10.15 |
배열과 메소드 (0) | 2020.10.13 |
2차원 배열 / 다차원 배열 (0) | 2020.10.13 |
변수의 초기화 / 초기화 블럭 (0) | 2020.10.08 |