[JAVA 29] 자바 ③ 수정 제한자 ( final )
3) 수정 제한자 ( final )
(1) 변수에 final 이 붙으면 상수가 되기 때문에 수정을 할 수 가 없다.
(2) 특징
① Class ( 클래스 ) , Variable ( 변수 ) , Method ( 메소드 ) 앞에 붙을 수 있다.
Constructor ( 생성자 ) 는/은 왜 안될까?
< Constructor 는 Overriding 이 되지 않는다. > ← 드래그 해서 보세요.
② Class ( 클래스 ) 앞에 붙으면 자식을 못 낳는다. 즉 , 마지막 자식이 된다.
Method ( 메소드 ) 앞에 붙으면 Overriding ( 오버라이딩 / 재정의 ) 가 되지 않는다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | final class FinalS2 { // 클래스 final final int STUDENT_NUMBER = 1; final void m(){ System.out.println("STUDENT_NUMBER : " + STUDENT_NUMBER); } public static void main(String[] args){ new FinalS2().m(); } } class User extends FinalS2{ // final 클래스 상속 void m(){ System.out.println("오버라이딩"); } public static void main(String[] args){ new User().m(); } } |
error : cannot inherit from final FinalS2 class User extends FinalS2
에러 : class User extends FinalS2 는 final FinalS2 으로부터 상속 받을수 없다.
error : m() in User cannot override m() in FinalS2 void m()
에러 : User 안의 m() 은 FinalS2 void m() 재정의 할 수 없다.
Variable ( 변수 ) 앞에 붙으면 상수가 된다. 즉 , 초기값을 바꿀수가 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | class FinalS1 { // final Study 1 final int STUDENT_NUMBER = 1; final void m(){ STUDENT_NUMBER = 2; // 초기값을 바꾸어 보았다. System.out.println("STUDENT_NUMBER : " + STUDENT_NUMBER); } public static void main(String[] args){ new FinalS1().m(); } } | cs |
error : cannot assign a value to final variable STUDENT_NUMBER
에러 : 상수 STUDENT_NUMBER 에 값을 할당할수 없다.
④ static final member variable 이 많은 이유가 있다.
생각해봅시다.