Abstract가 상속을 가제하는 일종의 규제라고 한다면 final은 abstract와는 정반대되는 의미를 가지고 있다.
상속이나 변경을 금지하는 규제이기 때문이다.
[PI 멤버에 final을 지정]
pakage org.opentutorials.javatutorials.finals;
Class calculator{
static final double PI = 3.14;
int left, right;
public void setOperands(int left, int right){
this.left = left;
this.right = right;
//Calculator.PI = 6;
}
public void sum(){
System.out.println(this.left + this.right);
}
public void avg(){
Systeem.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;
}
}
상수를 static으로 지정했던 이유는 바뀌지 않는 값이기 때문이었다. 공통적이라는 부분에서는 static을 쓸 수 ㅆ는데 “바뀌지 않는”에 대해서는 문법적인 또는 기능적인 지원이 없었다.
다시 말해 원한다면 PI 변수에 담긴 3.14라는 값을 사용하는 쪽에서 수정할 수도 있었다는것이다.
자바 언어가 가진 기능을 이용해 사용자가 이 값을 절대로 바꾸지 못하게 할 수 있다. 바로 그 때 사용하는 것이 final이다.
필드에 final을 지정하면 3.14라는 값이 지정된 PI 값은 한 번 설정된 이후로 바꿀 수 없는 상수가 된다. 고정된 값이 되는 것이다.
final의 의는 상속과 관련이 있다. 메소드가 final로 지정되면 해당 메소드는 오버라이딩할 수 없다.
필드나 메소드와 마찬가지로 클래스에도 final을 지정할 수 있다.
'생활코딩 > JAVA' 카테고리의 다른 글
생활코딩 - JAVA (다형성) (0) | 2020.12.29 |
---|---|
생활코딩 - JAVA (인터페이스) (0) | 2020.12.19 |
생활코딩 - JAVA (Abstract) (0) | 2020.12.19 |
생활코딩 - JAVA (접근 제어자) (0) | 2020.12.19 |
생활코딩 - JAVA (패키지) (0) | 2020.12.13 |