[JAVA] FINAL 키워드

@욕심쟁이

·

2020. 9. 2. 14:06

반응형

Final 

- 클래스, 메서드, 변수 선언 시 변경의 마지막을 표시

- 멤버변수에 final 사용시 : 변수 값 변경 금지(= 상수로 취급됨)

   → final키워드가 붙은 변수(상수)는 일반 변수와 구분하기 위해 대문자 변수명을 작성함(단어구분은 언더바(_)사용)

- 메서드에 final 사용시 : 메서드 변경 금지(= 오버라이딩 금지)

- 클래스에 final 사용시 : 클래스 변경 금지(= 상속 금지) → 대표적인 final클래스 : java.lang.String, java.lang.Math 등

 

1.멤버변수에 final키워드 사용

public class Ex3 {
	public static void main(String[] args) {
		FinalVariable f = new FinalVariable();
		f.num1 = 100;
//		f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
		System.out.println();
	}
}
//1.멤버변수에 final키워드 사용
class FinalVariable{
	int num1 = 10;  //일반 멤버변수(차후에 값 변경 가능)
	//final int num2 =20; // 상수로 취급됨(차후에 값 변경 불가능)
	final int NUM2 =20; // 일반적으로 상수는 대문자로 표기
	final String SCHOOL_NAME="아이티윌"; //단어구분은 언더스코어(_)사용
}

2. 메서드에 final키워드 사용

public class Ex3 {
	public static void main(String[] args) {
		FinalVariable f = new FinalVariable();
		f.num1 = 100;
//		f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
		System.out.println();
	}
}

//2.메서드에 final키워드 사용
class FinalMethod{
	public void nornalMethod() {
		System.out.println("일반메서드!");
	}
	public final void finalMethod() {
		System.out.println("finals 메서드!");
	}
}

class FinalMehodSubClass extends FinalMethod{
	
	public void nornalMethod() {
		System.out.println("일반메서드!");
		finalMethod();//final메서드 호출은 가능
	}
/*	final제한자가 사용된 메서드는 오버라이딩 불가능	
 	public void finalMethod() {
		System.out.println("finals 메서드!");
	}
	*/	
}

3. 클래스에 final키워드 사용 → 상속금지

public class Ex3 {
	public static void main(String[] args) {
		FinalVariable f = new FinalVariable();
		f.num1 = 100;
//		f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
		System.out.println();
	}
}
//3. 클래스에 final키워드 사용 => 상속금지
final class FinalClass{}
//final제한자가 붙은 클래스를 상속 받는 경우
//=>상속 불가능한 클래스 이므로 오류발생
//The type FinalClassSubClass cannot subclass the final class FinalClass 에러발생
//class FinalClassSubClass extends FinalClass{}

class HasAClass{
	//final클래스는 상속 불가능하지만, 이스턴스 생성을 통해 사용가능
	FinalClass fc = new FinalClass();
}
반응형