final 클래스: 클래스 이름 앞에 final을 사용하면 클래스를 상속받을 수 없음
final class FinalClass{ //이 클래스는 상속 불가
...
}
class SubClass extends FinalClass{ //상속 불가, 컴파일 오류
...
}
final 메소드: final로 메소드를 선언하면 오버라이딩할 수 없음
public class SuperClass{
protected final int finalMethod(){...}
//finalMethod()는 자식 클래스에서 오버라이딩 불가
}
class Subclass extends SuperClass{
protected int finalMethod(){...} //오버라이딩 불가, 컴파일 오류
}
- 자식 클래스가 부모 클래스의 특정 메소드를 오버라이딩하지 못하게 하고 무조건 상속받아 사용하게 할 때
final 필드: final로 필드를 선언하면 필드는 상수가 됨
public class FinalFieldClass{
final int ROWS = 10; //상수 선언, 초기화해야 됨
void f(){
int[] intArray = new int[ROWS];
ROWS = 30; //final 필드 변경 불가, 컴파일 오류
}
}
- 상수 필드는 선언 시 초기값을 지정
- 상수 필드는 실행 중 값 변경 불가
class SharedClass{
pulic static final double PI = 3.14;
}
- final 키워드를 public static과 함께 선언하면 프로그램 전체에서 사용 가능한 상수가 됨
double area = PI*radius*radius;
- SharedClass 내에서는 그냥 PI로 사용
double area = SharedClass.PI*radius*radius;
- 다른 클래스는 클래스로 접근하여 사용