final
public static final
public final class{ }
: 형태가 있다. 변수들, 메서드들을 갖고 있다. 추가 불가능.
추가(확장)을 하려면 상속을 받아서 확장(extends)해야 하는데 final
은 확장 불가(상속불가).
public final 변수명
: 초기값 세팅 후 변경이 불가능 -> 상수
public final 메서드명()
: 메서드 변경 불가. 부모 클래스의 메서드를 재정의(oberride) 할 수 없다.
예제
부모 클래스
public class Super {
public final void print() {
}
}
public final class Super {}
라고 final
을 붙이게 되면 상속 받을 때 오류가 난다.
print()
메서드 앞에는 final
이 붙었기 때문에 상속해서 재정의(변경) 할 수 없다.
자식 클래스
public class Sub extends Super{
final int NUMBER = 100;
public void printData() {
super.print();
System.out.println(NUMBER);
int number = NUMBER + 100;
System.out.println(number);
}
}
- 어떤 클래스를 상속 받으려면 클래스명 뒤에
extends 상속받을클래스명
을 쓰면 된다.
final
이 붙은 메서드인 print()
메서드는 재정의(override
) 할 수 없다.
- 새로운 메서드인
printDate()
만든 다음 그 안에서 super.print()
를 하여 부모 클래스를 먼저 실행하고, 출력하고 그 다음 코드를 출력한다.
System.out.println(NUMBER);
final
변수인 NUMBER
는 값을 변경 할 수 없다.
NUMBER += 100;
이런식으로 코드를 쓴다면 오류가 난다.
int number = NUMBER + 100;
System.out.println(number);
final
변수의 값을 변경 할 수는 없지만 새로운 변수 number
를 만들어서 연산 후 저장은 가능하다.