static (‘클래스의’, ‘공통적인’)
static 변수를 모든 인스턴스가 공유
→ 인스턴스에 관계없이 같은 값을 가짐
인스턴스 생성하지 않고 사용 o
class StaticTest{
static int width = 200; //클래스 변수(static 변수)
static int height = 120; //클래스 변수(static 변수)
static { //클래스 초기화 블럭
// 메모리 로드 시 단 한번만 수행, 주로 클래스변수(static 변수) 초기화 시 사용
}
static int max(int a, int b){ //클래스 메서드(static 메서드)
return a > b ? a : b;
}
final (’마지막의’, ‘변경될 수 없는’)
final class FinalTest{ //자식클래스 가질 수 x
final int MAX_SIZE = 10; //값 변경 x
final void getMaxSize(){ // 오버라이딩 x
final int LV = MAX_SIZE; // 값 변경 x
return MAX_SIZE;
}
}
abstract (’추상의’, ‘미완성의’)
abstract class AbstractTest{ //추상 클래스
abstract void move(); //추상 메서드 (구현부 x)
}
접근 제어자
| 같은 클래스 | 같은 패키지 | 자식클래스 | 전체 | |
|---|---|---|---|---|
| public | O | O | O | O |
| protected | O | O | O | |
| (default) | O | O | ||
| private | O |
<aside> 💡 접근제어자 사용 이유 (캡슐화 Encapsulation)
메서드에 static과 abstract 동시 사용 x
클래스에 abstract과 final 동시 사용 x
abstract 메서드의 접근 제어자 private 사용 x
오버라이딩 제한을 위해 메서드에 private과 final 같이 사용할 필요 x
→ 둘 중 하나만 사용해도 충분