✍ final 키워드
- 클래스, 메서드, 멤버변수에 지정가능하다
- 정말 마지막 이라는 뜻이다
1) 멤버변수에 final이 붙은 경우
멤버변수에 final이 붙으면 상수로 취급되기 때문에 변수의 값 변경이 불가능하다.
즉, 기존에 저장된 값을 사용하는 것만 가능하고, 값을 변경할 수 없다.
💻
class FinalMemberVariable {
int normarVariable = 10; // 일반 멤버변수
final int finalVariable = 20; // final 멤버변수
}
public static void main(String[] args) {
FinalMemberVariable fmv = new FinalMemberVariable(); // 객체생성
fmv.normarVariable = 99; // 일반 멤버변수의 값을 변경 가능하다
fmv.finalVariable = 10;
System.out.println(fmv.normarVariable);
System.out.println(fmv.finalVariable);
}
이때 만약에 final의 붙은 멤버변수의 값을 변경하려고 하면 어떻게 될 까?
--> final이 붙은 멤버변수의 값을 변경하려고 하니 컴파일 오류가 발생한다.
2) 메서드에 final이 붙은 경우
메서드 변경이 불가능 하다. 즉, 오버라이딩을 할 수 없다.
슈퍼클래스의 메서드를 상속받아 사용하는 것은 가능하지만, 오버라이딩을 통해
슈퍼클래스의 메서드를 수정(변경)할 수는 없다.
기본문법
[접근제한자] final 리턴타입 메서드명(매개변수...) {}
✍
class FinalMethod {
public void normalMethod() {
System.out.println("notmalMehtod()");
}
public final void finalMethod() { // final 메서드
System.out.println("finalMethod()");
}
}
class SubClassFinalMethod extends FinalMethod { // 상속
@Override
public void normalMethod() {
System.out.println("서브 클래스에서 오버라이딩 된 normalMethod()");
}
}
💻
--> 자동완성으로 오버라이딩이 되지 않을 뿐더러, 강제로 오버라이딩을 하려고 해도 오류가 발생한다.
Cannot override the final method from FinalMethod <-- 오버라이딩 할 수 없다는 오류 메시지가 뜬다.
3) 클래스에 final이 붙은 경우
클래스의 변경이 불가능하기 때문에 상속이 금지된다.
즉, 특정 클래스 자체를 그래도 사용하는 것은 가능하지만, 다른 클래스에서 해당 클래스를 상속받을 수 없다.
--> 어떤 클래스 자체로 이미 완전한 클래스 기능을 수행하는 경우 상속을 금지시킨다.
대표적인 예로 Math, String 클래스가 있다.
주로 final 메서드 보다 더 광범위한 제한을 둘 때 클래스에 final을 사용한다.
기본문법
[접근제한자] final class 클래스명 {}
✍
final class FinalClass {} // final 클래스
class SubClassFinal extends FinalClass {} // 상속 불가
💻
--> 클래스의 변경이 불가능하기 때문에 상속이 금지된다.
The type SubClassFinal cannot subclass the final class FinalClass <-- 오류메세지
'개발 > Java' 카테고리의 다른 글
[Java] 인터페이스 (Interface) (0) | 2023.02.15 |
---|---|
[Java] 추상 메서드 (0) | 2023.02.14 |
[Java] 다형성 (0) | 2023.02.11 |
[Java] 동적 바인딩 (0) | 2023.02.11 |
[Java] 클래스들의 관계 (0) | 2023.02.11 |