본문 바로가기

AdvancedJava

final keyword

final keyword

class B{

final A a;
B(){
a= new A();
a.x=10;
}

m1(){

a.x=20;
}


}

이거 된다. 



class B{

final A a;

// final 이 부은 필드는 반드시 생성자에서 초기화 해야한다. 
생각보다 복잡하다. 

이 부분에서 컴파일 에러 난다. 


m1(){

a.x=20;
}


}

final 은 생성자에서 초기화 할 때, if 문이라도 두번 생성할 수 없다. 

그래서 temp 변수로 따로 할당하여 옮기고 한번만 초기화 할 수있게 한다. 



final 또 다른 예 


public m1(){


 int x =10;


B b =new B(){

//여기는 b의 객체안에 있는 코드이기때문에 x를 참조 하지 못한다. m1의 x에서 final 을 붙이게 되면 참조 가능하다. 


m2(){


x=20;


}

}


} //에러 


만약에 메소드에 다가 final을 붙이면 ??



상속이라는게 때로는 잘못된 동작을 야기한다. 


 예를들어 


class A {

m1(){         // 이 메소드에 final 을 붙이게 되면 print "b"는 에러가 난다. 여기서 class에 final을 붙이면 상속 하지 못하게 막을수 있다. 

print "A"

}

}



c;ass B extends A{

m1(){

print "b";

}

}

'AdvancedJava' 카테고리의 다른 글

[2일차] Virtual Method  (0) 2016.07.06
복구한 인터페이스 내용  (0) 2016.07.06
static Keyword  (0) 2016.07.05
어노테이션, 생성자, 제어자  (0) 2016.07.05
한번 날라간 인터페이스 포스팅  (0) 2016.07.05