이번 시간에는 자바에서 fianl 지정자에 대해 글을 써봅니다.
우선 final 지정자는 abstract와 반대 개념으로 생각하시면 됩니다.
크게 어려운 개념은 아니라서
바로 예제로 들어갑니다.
/*[1]final + class : 상속을 못받게 함
*[2]final + method : 오버라이딩을 못하게 함
*[3]final + 변수 : 값 할당을 못하게 상수로 만든다.
*
* */
final class Super{
void foo(){
System.out.println("Super's foo()");
}
}
class Sub{ // extends Super(){ [x] class 앞에 final이 붙으면 상속 불가
void bar(){
System.out.println("bar###");
}
final void baz(){
System.out.println("baz@@@");
}
}
class SubSub extends Sub{
int x=10; // 인스턴스 변수
final int y=20; // final인 인스턴스 변수
public static final int z=30; // final인 클래스 변수
@Override
protected void bar(){
System.out.println("bar!!!!!");
}
/*protected void baz(){ [x] 재정의 불가. final메소드이므로
System.out.println("baz%%%%%");
}*/
}
public class FinalTest {
public static void main(String[] args) {
//SubSub의 x,y,z 값을 출력하기
SubSub d = new SubSub();
System.out.println("d.x : " + d.x);
System.out.println("d.y : " + d.y);
System.out.println("d.z : " + d.z);
System.out.println("SubSub.z : " + SubSub.z);
System.out.println("--값 변경--------");
d.x=50;
System.out.println("d.x : " + d.x);
//final이 붙은 변수는 값 변경이 불가
/*d.y=60;
SubSub.z=90;*/
}
}

댓글 없음:
댓글 쓰기