java에서 final은 변경할 수 없도록 고정하는 역할을 하는 키워드로 변수, 메서드, 클래스에 사용할 수 있다.
final 변수 (상수)
final 키워드가 붙은 변수는 값을 변경할 수 없다.
초기화 방법에는 두가지가 있다.
첫번째 : 선언과 동시에 초기화
public class Example {
public static void main(String[] args) {
final int x = 10;
System.out.println(x);
x = 20; // ❌ 오류 발생 (final 변수는 변경 불가!)
}
}
두번째 : 생성자를 통한 초기화 (인스턴스 변수의 경우) - 객체마다 개별 값
public class Example {
final int y; // 생성자를 통해 초기화해야 함
public Example(int value) {
this.y = value; // 생성자에서 한 번만 초기화 가능
}
public static void main(String[] args) {
Example obj = new Example(100);
System.out.println(obj.y);
obj.y = 200; // ❌ 오류 발생 (한 번 초기화된 값은 변경 불가)
}
}
세번째 : static final (상수 만들기) - 변경할 수 없는 클래스 변수
public class Example {
static final double PI = 3.14159; // 변경 불가능한 상수
public static void main(String[] args) {
System.out.println(PI);
PI = 3.14; // ❌ 오류 발생
}
}
final 메서드 (오버라이딩 제한)
final이 붙은 메서드는 서브클래스에서 오버라이딩 할 수 없다.
class Parent {
final void show() {
System.out.println("부모 클래스 메서드");
}
}
class Child extends Parent {
void show() { // ❌ 오류 발생! (final 메서드는 오버라이딩 불가능)
System.out.println("자식 클래스에서 변경");
}
}
final 클래스 (상속 금지)
final class Animal {
void sound() {
System.out.println("동물 소리");
}
}
class Dog extends Animal { // ❌ 오류 발생! (final 클래스는 상속 불가)
void sound() {
System.out.println("멍멍");
}
}

