업데이트 : 아래의 원래 답변은 질문을 완전히 이해하지 않고 작성되었으므로 질문을 직접 해결하지는 못하지만 키워드 :)
의 일반적인 사용법을 이해하려는 사람들에게는 유익해야합니다 final
.
질문에 대해서는 아래에서 내 의견을 인용하고 싶습니다.
나는 당신이 자신의 구현에서 최종적인 것인지 아닌지를 자유롭게 결정할 수 있도록 논쟁의 최종성을 구현해서는 안된다고 생각합니다 .
그러나 그렇습니다 final
. 인터페이스에서 선언 할 수는 있지만 구현에서 최종적이지 않은 것은 다소 이상하게 들립니다 . 다음 중 하나에 해당하면 더 의미가있을 것입니다.
ㅏ. final
인터페이스 (추상) 메소드 인수에 키워드가 허용되지 않았지만 (구현에 사용할 수 있음)
b. final
인터페이스에서 와 같이 인수를 선언하면 final
구현 에서 인수를 선언 해야하지만 (최종이 아닌 경우에는 적용되지 않음)
메소드 서명이 final
매개 변수 를 가질 수있는 두 가지 이유를 생각할 수 있습니다 : Beans and Objects ( 실제로 그들은 같은 이유이지만 약간 다른 컨텍스트입니다. )
사물:
public static void main(String[] args) {
StringBuilder cookingPot = new StringBuilder("Water ");
addVegetables(cookingPot);
addChicken(cookingPot);
System.out.println(cookingPot.toString());
// ^--- OUTPUT IS: Water Carrot Broccoli Chicken ChickenBroth
// We forgot to add cauliflower. It went into the wrong pot.
}
private static void addVegetables(StringBuilder cookingPot) {
cookingPot.append("Carrot ");
cookingPot.append("Broccoli ");
cookingPot = new StringBuilder(cookingPot.toString());
// ^--- Assignment allowed...
cookingPot.append("Cauliflower ");
}
private static void addChicken(final StringBuilder cookingPot) {
cookingPot.append("Chicken ");
//cookingPot = new StringBuilder(cookingPot.toString());
// ^---- COMPILATION ERROR! It is final.
cookingPot.append("ChickenBroth ");
}
final
키워드는 우리가 실수로 새 생성되지 않습니다 보장 현지 우리가 그렇게 할 시도 할 때 컴파일 오류를 보여줌으로써 요리 냄비를. 이를 통해 닭 국물이 addChicken
방법이 얻은 원래 요리 냄비에 추가됩니다 . addVegetables
콜리 플라워를 잃어버린 곳 과 원래의 냄비 대신 새로운 지역 요리 냄비에 추가했기 때문에 이것을 비교하십시오 .
Beans :
객체와 동일한 개념입니다 (위 그림 참조) . 콩은 본질적 Object
으로 Java에 있습니다. 그러나 Bean (JavaBeans)은 정의 된 관련 데이터 콜렉션을 저장하고 전달하는 편리한 방법으로 다양한 애플리케이션에서 사용됩니다. addVegetables
새로운 요리 냄비를 만들어 StringBuilder
콜리 플라워로 버려 요리 과정을 망칠 수있는 것처럼 요리 냄비 JavaBean으로도 같은 작업을 수행 할 수 있습니다 .
final
어쨌든 네이티브 유형은 복사되기 때문에 아무것도하지 않습니다.