final (field,Static final(상수),
Class, Method)
- 한번의 초기화로 인하여 값을 변경할수 없는 필드
- 메서드를 호출해서 객체가 사용할수있도록 준비하는 역할 수행
CODE
public class Person {
final String nation = "kr"; //값을 초기에 할당하거나
final String ssn;
public Person(String ssn) {//생성자 선언시 할당하거나
this.ssn = ssn; //final은 최초한번만 값대입가능
}
}
상수 (Static final)
- final 필드가 객체 마다 가지는 인스턴스 필드라고 하면
- 상수는 객체마다 가지고있지 않고 메소드 영역에서 클래스별로 관리되는 정적 필드
- 공용데이터로 관리
CODE
static final dobule EARTH_RADIUS = 6400;
//상수의 이름은 전부 대문자로 작성 단어와 연결시 _(언더바)
static final double EARTH_SURFACE_AREA;
static{
EARTH_SURFACE_AREA = 4 * Math.PI * EARTH_RADIUS * EARTH_RADIUS;
}
final 클래스
- 상속과 연관
- 부모로 사용할 수 없는 클래스
CODE
public final class A{} //A라는 final 클래스가 있을때
///////////////////////////////////////////////
public class B extends A{} // A클래스가 final 클래스로 선언되어있어 상속을 받지못함 컴파일에러 발생
final 메소드
- 상속과 연관
- 자식이 재정의할 수 없는 메소드
CODE
public class Car{
public int speed;
public void speedUp(){
speed += 1;
}
public final void stop(){ //메소드도 final 클래스와 마찬가지로 final 메소드인 stop을 override하려고하면 컴파일 에러발생!
System.out.println("차를 멈춤");
speed =0;
}
}