이번 시간에는 자바에서 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;*/ } }
댓글 없음:
댓글 쓰기