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 |