초기값이 저장되면 최종값이 되어서 프로그램 실행 도중 수정을 할 수 없는것.
final 타입 필드 [=초기값];
ex) final 필드 선언 및 초기화 예시
public class Person {
final String nation = "KOREA";
final String ssn;
String name;
public Person(String ssn, String name) {
this.ssn = ssn;
this.name = name;
}
}
public class PersonExmaple {
public static void main(String[] args) {
Person p1 = new Person("123456-1234567", "홍길동");
System.out.println(p1.nation);
System.out.println(p1.ssn);
System.out.println(p1.name);
// p1.nation = "USA";
// p1.ssn = "111111-2222222";
p1.name = "놀부";
}
}
final 필드인 nation과 ssn은 값 수정이 불가능하다.
불변의 상수 값.
객체마다 저장이 되지않고 클래스에만 포함된다. 한번 초기값이 저장되면 변경할 수 없다.
1. 초기값이 단순 값일 경우
static final 타입 상수명 [=초기값];
2. 초기값이 복잡 할 경우
static final 타입 상수명;
static {
상수명 = 초기값;
}
상수의 이름은 모두 대문자로 작성하는것이 관례.
서로 다른 언어가 혼합된다면 스네이크 케이스 _
로 연결해준다.
static final double PI = 3.14159;
static final double EARTH_SURFACE_AREA;
static {
EARTH_SURFACE_AREA = 10000000.1234;
}
클래스를 선언할 때 class 앞에 final
키워드를 붙이면 상속할 수 없는 클래스가 된다.
즉 final 클래스는 부모 클래스가 될 수 없다.
public final class 클래스이름 { ... }
ex) final 클래스 예시
final 클래스인 Member 클래스는
상속
을 할 수 없는것을 확인 할 수 있다.
메서드를 선언할 때 메서드 앞에 final 키워드를 붙이면 오버라이딩(Overriding)
할 수 없는 메서드가 된다.
즉 부모 클래스에서 final로 선언된 메서드는 부모 클래스를 상속받은 자식 클래스에서 다시 재정의 할 수 없다.
public final 반환타입 메서드이름( [매개변수, ...] ) {...}
ex) final 메서드 예시
final 메서드인 stop( ) 메서드를 @Override 하여 재정의 할 수 없는것을 확인 할 수 있다.
참조
- 이것이 자바다 (책)