더이상 상속을 못하는 final 키워드 (클래스와 메소드)

하히호호·2024년 4월 22일
0

final

final 키워드는 변수, 메소드, 클래스를 선언할때 사용할 수 있다.
final 키워드가 어디에 쓰이느냐에 따라 해석이 조금씩 달라지는데, 특징이 있다면
final 키워드가 붙으면 제한을 건다는 것이다.
상수, 리터럴 값을 설정하려면 변수에 final이 쓰인다. 즉, final이 붙은 변수는 더이상 값을 변경할 수 없다.

final 클래스

클래스 선언할 때 final 키워드를 붙이면 이 클래스는 최종적인 클래스이므로 더이상 부모 클래스가 될 수 없다. 즉, 클래스 자체가 최종 클래스가 되는 것이다.
'여기에서 대를 끊을래'와 같은 의미이다.

형식

public final class 클래스명{ ... }

String 클래스

우리가 마치 기본형처럼 사용하지만 첫글자가 대문자로 시작하는 String타입도 사실 final 클래스이다.
확인해보자!

코드

package myPractice;

public final class FinalClassPra {
	public int i = 1;
}
package myPractice;

public class FinalClass extends FinalClassPra {

}

FinalClassPre cannot be resolved to a type

final 메서드

메소드를 선언할때 final 키워드가 붙으면 어떻게 될까?
이 메소드는 최종 메소드가 되어 오버라이딩 할 수 없는 메소드가 된다.

형식

public final 리턴타입 메소드(){...}

코드
FinalClassPra

public class FinalClassPra {
	public int speed;
	
	public void go() {
		System.out.println("주행중");
		speed++;
	}
	public final void stop() {
		System.out.println("브레이크");
		speed = 0;
	}
}

FinalClass

public class FinalClass extends FinalClassPra {

	@Override
	public void go() {
		// TODO Auto-generated method stub
		super.go();
	}
	
	@Override // 오류
	private void stop() {
		// TODO Auto-generated method stub

	}
}

Cannot override the final method from FinalClassPra

정리

단어 자체 의미인 '최종'의 의미는 변하지 않는다.
final 키워드가 쓰인 멤버라면, 변하지 않을 것이라는 낙인이 찍힌 코드라고 생각하자.

protected 접근 제한자

앞서 다른 접근 제한자는 정리를 했다.
오늘 정리할 protected는 상속과 연관이 있기에 상속을 배운 지금, 정리를 해보고자 한다.

같은 패키지에서 default와 같이 접근 제한이 없지만 다른 패키지에서 자식 클래스만 접근이 허용되는 접근 제한이다.

  • 같은 패키지 내에 접근 가능
  • 다른 패키지이지만 상속받았으면 접근 가능
profile
읽히는 코드를 짜고싶습니다.

0개의 댓글