추상이 상속을 강제하는 것이라면 final은 상속/변경을 금지하는 규제다.
package org.opentutorials.javatutorials.finals;
class Calculator {
static final double PI = 3.14;
//PI라는 변수를 정의했지만 변경될 수 있었다. 그러나 final로 지정해버리면 확정이다.
int left, right;
public void setOprands(int left, int right) {
this.left = left;
this.right = right;
//Calculator.PI = 6;
//위에서 final로 고정했으므로 변경하려고 하면 오류가 나온다.
}
public void sum() {
System.out.println(this.left + this.right);
}
public void avg() {
System.out.println((this.left + this.right) / 2);
}
}
public class CalculatorDemo1 {
public static void main(String[] args) {
Calculator c1 = new Calculator();
System.out.println(c1.PI);
//Calculator.PI = 10;
//여기서도 오류가 나온다.
}
}
2. final 메소드
final 메소드는 final 변수만큼 사용 빈도가 높지 않다. 아래 코드를 통해 살펴보자.
package org.opentutorials.javatutorials.finals;
class A{
final void b(){}
}
class B extends A{
void b(){}
}