자바(Java) - final 지정자란? 개념과 예제 포함~!

안녕하세요

이번 시간에는 자바에서 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;*/
 }
}

댓글 없음:

댓글 쓰기