Dev/Java

[Java] final 키워드

kjyyjk 2022. 7. 16. 20:25

final 키워드는 클래스, 필드 , 메서드 선언 시에 사용할 수 있다.

 

필드 선언 시에 final을 붙이면 초기값으로 설정되어, 더 이상 수정할 수 없다는 것을 앞에서 확인 했었다.(like 상수)

 

그러면 만약 final 키워드를 클래스와 메서드 선언 시에 붙이면 어떻게 될까?

 

public final class String{
	...
}

String 클래스는 자바 표준 api에서 제공하는 대표적 final 클래스이다.

 

이처럼 클래스를 선언할 때 final을 붙이면 이 클래스는 최종적인 클래스로 되어서 상속을 할 수가 없다.

 

따라서 final 클래스는 상속을 하지 못하므로 , 자식 클래스도 없고 부모 클래스도 아니다.

 

public final class Food extends{	//Food 클래스는 final과 함께 선언되어 상속할 수 없는 final클래스
	String name;
}

public class Banana extends Food{	//상속 받지 못한다. 에러.
}	// Food 클래스는 상속이 불가하므로

ㄴ>  에러. 불가.

 

메서드도 같은 맥락이다.

 

메서드 선언 시에 final 키워드를 붙이면 최종적인 메소드이므로 오버라이딩 할 수 없다.

 

즉, 부모 클래스로부터 상속 받을 때 부모 클래스의 final 메서드는 자식 클래스에서 재정의 할 수 없다.

 

public class Food{	

	public final void cut(){
    	System.out.println("과일을 자릅니다.")
    }

}

public class Banana extends Food{
	public void cut(){ x x x x x x }	 //cut 메서드는 final 메서드이므로 오버라이딩 할 수 없다
}