상수에 final이 붙는 경우
public class finalTest {
public static void main(String[] args) {
final int A = 10; // 초기화 후
// A = 20; // 변경불가
System.out.println(A); // 읽기 전용
}
}
맴버 필드에 붙는 경우
//맴버 필드에 적용될 경우
class test2 {
final int A = 10;
void method() {
//A = 20; // 변경불가
}
}
public class finalTest2 {
public static void main(String[] args) {
test2 ob = new test2();
//ob.A = 20; // 변경불가
System.out.println(ob.A); //읽기 전용
}
}
매서드에 붙는 경우
//메서드에 적용될 경우
class test2 {
final void method() {} // 자식에서 재정의 불가
void method2() {} // 자식에서 재정의가능
}
class test2Sub extends test2{
/*
@Override
void method(){} // 불가능
*/
@Override
void method2() {
}
}
public class finalTest3 {
public static void main(String[] args) {
}
}
클래스에 붙는 경우
//클래스에 적용될 경우
final class test2 {
void method() {}
void method2() {}
class test2Sub extends test2{ // 상속불가능
}
public class finalTest4 {
public static void main(String[] args) {
String str;
}
}
알아야 할 점
- final 이 사용되면 final을 사용하겠다는 생각이 아닌
final 이 붙는 의미를 파악하는게 중요
ex) class에 final 을 붙여 상속을 못받게 한다