반응형

Final Keyword In Java!!


fianl은 유저에게 엄격할 뿐더러 오직  변수, 메소드,  클래스총 3곳에 사용될 수 있습니다!

final 키워드는 변수와 함께 사용될 수 있고, 

값이 없는 빈 변수 혹은 초기화되지않은 빈 파이널 변수에 사용될 수 있습니다.

파이널 변수는 생성자에서만 초기화시킬 수 있고, 

빈 파이널 변수(Blank Final Variable)은 static이 될 수 있고 static 블럭안에서 초기화 될 수 있습니다.

감이 안오신다면 더 자세히 알아보도록할까요.

1) FINAL VARIABLE 

한번 선언하면 값을 바꿀 수 없습니다.

SWIFT에서 let의 역할을 하고있는것같네요.

예제를 한번 살펴봅시다.

Bike9클래스를 만든 후 필드에 speedlimit란 정수타입 변수에게 90의 초기값과 final키워드를 붙여줍니다.

그리고 run() 메소드에 위에서 초기화했던 speedlimit값을 재초기화하는 구문을 넣습니다.

Bike9클래스안에 main메소드를 넣고 인스턴스를 생성하고 매소드를 실행해봅시다.

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

The final field Bike9.speedlimit cannot be assigned


at fianl_keyword.Bike9.run(Bike9.java:7)

at fianl_keyword.Bike9.main(Bike9.java:12)


2번째 줄 보이시나요?  BIke9.speedlimit는 재정의될 수 없습니다.!

네, 맞아요 final이 걸리면 게다가 초기화가 된 채로 선언되면 바꿀수없어요.. 생성자도 아닌 메소드에선 더더욱..

2) Final Method

Bike클래스를 정의하고 final 메소드를 선언한다음에 

메인 메소드에서 자식 객체를 생성하여 

자식객체가 부모객체를 오버라이드한 메소드를 실행시켜볼 예정입니다.


Bike클래스를 상속받고 부모클래스의 메소드를 오버라이드했습니다.

그리고 실행해보지요.

두둥..


Exception in thread "main" java.lang.VerifyError: class fianl_keyword.Honda overrides final method run.()V





에러 덩어리네요.

중요한건 맨 위 2줄이라 나머지는 잘랐습니다만,

2번쨰 줄이 가장 중요하네요.

  final 메소드 run()을 오버라이드할 수 없습니다.!

슬슬 이해가 되시나요?

3) final class 

final키워드를 붙힌 Bike클래스를 만들고

final클래스인 Bike를 상속합니다(에러)


Exception in thread "main" java.lang.Error: Unresolved compilation problem: 

Honda cannot be resolved to a type


at fianl_keyword.Bike.main


final클래스를 상속하려고하니 

자바 컴파일러가 " 야, 이거 final이야 상속못해. 돌아가."

라고 합니다. 

Q)그럼, 메소드를 오버라이드하지 못해도 상속받는건 가능한가요?

A)네 가능합니다.!



fianl메소드를 오버라이드하는 건 불가능하지만, 순수 호출은 가능하다는거! 중요하겠지요?

정리해보자면,

final 키워드는 변수,메소드,클래스에 사용될 수 있는데,

final은 오버로드와 오버라이드 그리고 상속이 제한된다는 점

하지만 순수호출은 가능하다는 점!

2편에서 봐요~:)



반응형
by 발전소장 에르 :) 2017. 8. 7. 01:47