자바에서 절대 변하지 않는 특정한 것을 정하고 싶을 때는 최종(Final)을 사용합니다.
이 키워드는 변수, 함수, 클래스에 모두 사용할 수 있으며
변수에 사용할경우 상수, 메소드에 사용할경우 재정의가 불가능한 함수,
클래스에 사용할경우 상속이 불가능한 하나의 완전한 클래스가 됩니다.
"최종적으로 규정하다" 라는 뜻을 가집니다
변수, 함수, 클래스 별로 Final을 붙여서 알아봅시다
먼저 변수에 Final붙이고 나중에 그 변수에 저장된 값을 변경하려고 하면 이렇게
final변수는 변경이 불가능하다고 오류가 나옵니다.
이제 함수의 final에 대해서 알아보겠습니다.
Parent라는 클래스를 하나 정의해주고 Hi라는 문자열을 출력하는 show라는 함수를 정의해줍니다
이후에 Main 클래스로가서 Parent 클래스를 상속받은 뒤
Main main = new Main();으로 main이라는 인스턴스를 선언해주고
main.show()를 실행해주면 Hi라는 문자열이 출력됩니다.
그런데 여기서, Main클래스 내에서 똑같이 show라는 함수를 선언하고
내용을 Hello라는 문자열 출력으로 바꾸면 어떻게 될까요?
오버로딩 되어 상속받은 부모 클래스의 함수를 무시하고 자신의 클래스 내의 show 함수를 실행합니다
따라서 Hello가 출력됩니다.
이렇게 함수가 오버로딩 자기도 모르는 사이에 오버로딩 되면
에러는 나지 않는데 프로그램에 버그가 발생합니다
따라서 함수 이름이 중복되지 않게 하기위해
Parent 클래스의 show함수앞에 final 키워드를 붙여줍니다.
그러면
이런식으로 final 함수가 오버로딩 돼었다고 오류가 뜨며 실행이 안됩니다.
이렇게 final 키워드로 함수의 재정의를 막아줍니다.
마지막으로 클래스의 final을 붙여봅시다
Parent 클래스에 public을 지우고 final키워드를 붙이자
이런식으로 바로 상속오류가 나는것을 볼 수 있습니다.
이렇게 클래스에 final 키워드를 붙이면 그 클래스는 다른 클래스에서 상속받을 수 없게 됩니다.
final은 결국 변수나, 함수, 클래스를 완전하게 보호하기 위해 붙여주는 키워드입니다.
또 eclipse에서는 final 클래스는 이렇게 파란색 삼각형 모양으로
표시해주고 있습니다.
다형성, 과일정보 프로젝트 구현 (0) | 2020.10.06 |
---|---|
인터페이스(Interface) (0) | 2020.10.06 |
추상을 이용하여 음악 플레이어 프로그램, 동물 클래스 구현 (0) | 2020.10.06 |
추상(Abstract) (0) | 2020.10.06 |
상속에 대해서2 (0) | 2020.10.06 |