[Java]자바 #23 final 키워드(클래스, 메소드)
- 프로그래밍 언어/Java
- 2019. 2. 20. 20:37
Final
- 클래스, 변수, 메소드 선언시에 사용할 수 있다.
- final 키워드는 해당 선언이 최종상태이고 결코 수정할 수 없음을 의미한다.
- 클래스, 변수, 메소드에 따라 의미가 달라진다.
-> 클래스 : 상속할 수 없는 클래스, extends 키워드로 다른 클래스를 상속할 수 없다.
-> 메소드 : 오버라이딩을 할수 없다. 부모클래스에서 선언된 final 키워드가 붙은 메소드는 자식클래스에서 오버라이딩(재정의)을 할 수 없다.
-> 변수 : 초기값 초기화를 하면 더이상 값을 수정할 수 없다.
final 변수
- 값을 한번 할당하면 다시는 변경할 수 없음.
- 상수에 가까운 변수.
ex)
int a = 10; // 일반변수
final int b = 20; // 권장함
final int c; // 비권장
System.out.println(a);
System.out.println(b);
System.out.println(b++); //The final local variable b cannot be assigned. It must be blank and not using a compound assignment 라는 메시지가 나온다.
System.out.println(a+b);
final 클래스와 final메소드
final 클래스
- 더이상 상속할 수 없는 마지막세대 클래스
- 특정 클래스를 설계할 때는 미래에 생겨날 자식클래스를 예측하기가 괸장히 힘들다.
- 특정 크래스의 멈버들을 나중에 자식클래스가 물려받을 때 일어날 수 있는 경우의 수를 예측하기가 힘들다.
ex)
final class FinalParent{
public void aaa() {
System.out.println("aaa");
}
}
=> 이렇게 final로 선언된 클래스가 있다면!!
class Child extends FinalParent{
=> The type FinalChild cannot subclass the final class FinalParent
이런 메시지가 나타나면서 상속할 수 없다고 한다.
@Override
public void aaa() {
System.out.println("AAA");
}
}
final 메소드
- 자식 클래스들이 재정의를 못하도록 막는 역할
- 메소드 오버라이드 금지
- 이 메소드는 재정의하면 프로그램이 불완전해지기 때문에(안전성)
ex)
class Parent{
public final void aaa() {
System.out.println("aaa");
}
}
=> 그냥 평범한 부모클래스가 있을 때는!!
class Child extends Parent{
@Override
public void aaa() {
=> Cannot override the final method from FinalParent
이번엔 해당 메소드를 오버라이딩할 수 없다는 메시지를 나타낸다!!
System.out.println("AAA");
}
}
final과 static의 조합
- final 과 static 키워드를 모두 사용한 변수를 상수로써 사용할 수 있다.
- 상수는 언제어디서나 같은위치에 있고(static) 값이 변하지 않는다(final)
- 상수를 선언할때 상수명은 모두 대문자로 표기한다.
ex)
class FinalTest2{
public final static int num =200; //꼭 아래처럼 대문자로 표기하자
public final static double PI = 3.141592653589793;
}
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #25, 인터페이스(Interface) (1) | 2019.02.23 |
---|---|
[Java] 자바 #24, 업캐스팅과 다운캐스팅(Casting) (0) | 2019.02.21 |
[Java] 자바 #22, 추상클래스(Abstract), 오버라이딩(Overriding) (0) | 2019.02.19 |
[Java] 자바 #21, 상속(Inheritance) (0) | 2019.02.17 |
[Java] 자바 #20, 생성자와 Getter,Setter 메소드 (2) | 2019.02.16 |