본문 바로가기

Java

상속 : final 클래스와 final 메소드

final 클래스와 final 메소드

final 키워드! 클래스, 필드, 메소드 선언 시 사용할 수 있는데. 최종상태고 절대 수정할 수 없단 말이다. 메소드는 할당 된 값을 바꿀 수 없다는 걸 알겠는데.. 그럼 클래스와 메소드에서 final 키워드를 지정한다는 건 무슨 의미일까?

클래스

public final class 클래스 {...}

이건 상속!이 불가능 하단 말이다.

java의 대표적인 예는 자바 표준 API에서 제공하는 String 클래스이다.

이런 식으로 선언 되어 있다. →

public final class String {..}
public class newString extends String() {...} // 삐-! 안 됨

왜 쓰는가?

아까 오버라이딩 할 때 봤던 그림이다.

상위 클래스의 내용을 바꾸면 아래 하위 클래스 다 영향을 끼치게 된다.

그래서 상위 클래스 메소드를 final 키워드 써서 못 바꾸게 하는 용도로 쓰인다.

참고

https://hashcode.co.kr/questions/388/자바에서-final-클래스는-어디에-사용하나요

메소드

메소드 선언 시 final 붙이면 더 이상 바꿀 수 없다. 즉 오버라이딩 할 수 없는 메소드가 된다.

public class Car{
	public int speed;
	public void speedUp() { speed+= 1;}
	public final void stop(){
		System.out.println("차 멈춤");
		speed =0;
	}
}
public class SportsCar extends Car{
	@Override
	public void speedUp() { speed += 10; }
	
	// 오버 라이딩 할 수 없음!
	@Override
	public void stop(){
		System.out.println("스포츠카를 멈춤");
		speed = 10;
	}	
}
반응형

'Java' 카테고리의 다른 글

상속 : 타입 변환과 다형성  (0) 2021.03.07
상속 : Protected 접근 제한자  (0) 2021.03.07
상속 : 메소드 재정의(오버라이딩)  (0) 2021.03.07
상속 : 상속의 개념  (0) 2021.03.07
참조타입  (0) 2021.03.04