public class ModifierTest {
// 순서는 상관 없지만, 관례적으로 접근제어자를 가장 왼쪽에 씀
public static final int WIDTH = 200;
public static void main (String[] args) {
System.out.println("WIDTH=" + WIDTH);
}
}
class StaticTest {
// 클래스 변수 (static 변수)
static int width = 200; // 간단 초기화 (명시적)
static { // 클래스 초기화 블럭
// 복잡한 초기화 수행
}
static int max(int a, int b) { // 클래스 메서드 (static 메서드)
return a > b ? a : b;
}
}
final class FinalTest { // 조상이 될 수 없는 클래스
final int MAX_SIZE = 10; // 값을 변경할 수 없는 멤버변수(상수)
final void getMaxSize() { // 오버라이딩 할 수 없는 메서드(변경 불가)
final int LV = MAX_SIZE; // 값을 변경할 수 없는 지역변수(상수)
return MAX_SIZE;
}
}
// 미완성 클래스
abstract class AbstractTest { // 추상 클래스 (추상 메서드를 포함한 클래스)
abstract void move(); // 추상 메서드 (구현부가 없는 메서드)
// 선언부만 있고, 구현부{} 가 없는 미완성 메서드
}
AbstractTest a = new AbstractTest(); // 에러. 추상 클래스의 인스턴스 생성 불가
=> 추상 클래스를 상속받아서 완전한 클래스(구상 클래스)를 만든 후에 객체 생성 가능
다음 네가지 중, 한가지만 사용이 가능하다.
class 앞에는 public, (default)만 올 수 있다.
멤버(변수, 메서드) 앞에는 4가지 모두 사용 가능하다.
하나의 패키지에 public class는 하나!
public class Time {
// 외부에서 iv에 직접 접근하는 것을 막는다.
private int hour;
private int minute;
private int second;
// 메서드에는 접근이 가능하게 한다. 메서드를 통한 iv 접근 ok (간접 접근 허용)
public int getHour() { return hour; }
public void setHour(int hour) {
if (hour < 0 || hour > 23) return; // iv 의 값을 보호한다
this.hour = hour;
}
}