Language/Java

[JAVA 29] 자바 ③ 수정 제한자 ( final )

reifier.tistory.com 으로 이전하였습니다. 2018. 2. 14. 12:34
반응형


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();
    }
}
 

cs


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 이 많은 이유가 있다.

    생각해봅시다.

반응형