문제
메소드에 최종 키워드를 사용할 수 있습니까?
해결책
전적으로! 그만큼 final
키워드는 거의 무엇이든 적용 할 수 있습니다. 각 경우에는 "더 이상 이것을 바꿀 수 없습니다"를 의미합니다.
적용 할 때 의미하는 바는 다음과 같습니다.
변수: 당신은 단순히 변수에 새 값을 할당 할 수 없습니다 (렌더링 끊임없는, 물론이야)
방법:이 메소드를 하위 클래스로 다시 구현할 수 없습니다 (즉, 재정의)
수업: 서브 클래스를 정의 할 수 없습니다
각각의 경우 우리는 단순히 간단하게 표시하고 있습니다.이 일이 선언되면, 이것이 마지막으로 볼 수있는 마지막 값 (또는 구현)입니다.
다른 팁
예, 방법을 다음과 같이 선언 할 수 있습니다. final
. 이는 메소드가 서브 클래스로 무시할 수 없음을 의미합니다.
에서 Java 언어 사양, 제 3 판, 섹션 8.4.3.3:
서브 클래스가 재정의 또는 숨기는 것을 방지하기 위해 메소드가 최종적으로 선언 될 수 있습니다. 최종 방법을 재정의하거나 숨기려고 시도하는 것은 컴파일 타임 오류입니다.
자세한 내용은 최종 수업 및 방법 작성 페이지 Java 튜토리얼 더 많은 정보가 있습니다.
예.
메소드를 최종적으로 만들 수 있습니다
public class A {
public static final void f() {
System.out.println("test");
}
}
일반적으로 방법을 최종적으로 만드는 두 가지 이유가 있습니다.
- 메소드가 최종이되면 ""가 "상환 될 수 있습니다.
- 메소드가 최종이되면 메소드는 재정의가 불가능합니다.
물론 가능합니다. 재정의가 불가능합니다.
물론 확인하십시오 최종 키워드의 마지막 단어
public abstract class AbstractBase
{
public final void performOperation() // cannot be overridden
{
prepareForOperation();
doPerformOperation();
}
protected abstract void doPerformOperation(); // must override
}
예.
최종 방법은 서브 클래스로 무시할 수 없습니다. 이것은 종종 서브 클래스가 클래스의 중요한 행동을 변화시키는 것을 방지하는 데 사용됩니다.
다른 답변에 대한 메모로. 너 ~할 수 있다 최종 사용. 실제로 나는 그것을 사용하는 사람들을 거의 보지 못하고 왜 그런지 잘 모르겠습니다.
요즘 내가 쓴 많은 코드는 멀티 스레드 환경을위한 것이며, 클래스를 최종 결승에 불변으로 만들어서 (가치 클래스 인 경우) threadSafe가되도록하는 경향이 있습니다.
일부 방법을 최종 (다른 방법이 아닌)로 표시하는 데있어 문제는 그 방법에 대해 특별한 것이 있고 다른 방법에 대해 특별한 것이 없다는 것을 진술하고 있다는 것입니다. 그것은 사람들이 실제로 내 경험에서 실제로 의미하는 바입니다.
클래스가 내유를 위해 의도 된 경우, 원치 않는 부작용을 방지하기 위해 클래스를 깨끗하게 유지하고 작게 유지해야합니다. 이 모든 것은 자신과 팀에 대한 코드를 작성하는지 여부에 따라 또는 더 많은 청중을 위해 글을 쓰고 있는지, 즉 오픈 소스 프로젝트 또는 상업 프로젝트에 대한 공개 API를 작성하고 있는지에 달려 있습니다.
예, 최종 키워드를 메소드에 사용할 수 있습니다. 불변성을 보존 할 것입니다. 방법이 깨지는 것을 방지합니다. 예를 들어, 클래스 X 메소드의 구현이 메소드 m이 특정 방식으로 작동한다고 가정한다고 가정합니다. X 또는 M을 최종으로 선언하면 파생 클래스가 X가 잘못 행동하는 방식으로 M을 재정의하는 것을 방지합니다.