추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다. 이 정도로 final의 용도를 기억해두고 코드를 보자.
final 필드 : 값의 변경 불가 필드
실행되는 과정에서 한번 값이 정해진 이후에는 변수 내의 값이 바뀌지 않도록하는 규제다. final 변수 값을 변경하려고 하면 자바는 이것을 허용하지 않는다.
final static pi = 3.14;
상수가 변하지 않는 값이라고 배운 기억이 날 것이다. 그리고 final 변수는 변하지 않을 값이다. 이런 값은 변수 앞에 final을 붙여서 이 값이 변경되는 것을 규제할 수 있다. 말하자면 10과 같은 상수값에 이름을 붙여 줄 수 있는 방법이 된다.
final 메소드 : Overriding 불가 메소드
final 메소드는 final 변수 만큼 사용 빈도가 높지는 않다. 아래의 코드는 final 메소드 b를 상속하려하기 때문에 오류가 발생한다.
package org.opentutorials.javatutorials.finals;
class A{
final void b(){}
}
class B extends A{
void b(){}
}
final 클래스 : 상속할 수 없는 Class
아래 코드는 final 클래스를 상속하려하고 있다. 따라서 오류가 발생한다.
package org.opentutorials.javatutorials.finals;
final class C{
final void b(){}
}
class D extends C{}