본문 바로가기
수업(국비지원)/Java

[Java] chap7 : 클래스의 관계 - Final 제한자, Final 메서드, Final 클래스

by byeolsub 2023. 4. 15.
  • Final 제한자
final 제한자 : 변경 불가의 의미.
  
  final(종단) 클래스 : 상속불가 클래스. 다른 클래스의 부모클래스가 될 수 없다.
  final(종단) 메서드 : 오버라이딩 불가 메서드. 
  final 변수(상수) : 변경 불가 변수.(설정된 값을 변경 할 수 없다.) 
                     상수(const 사용안함)
              final 멤버 변수는 생성자에서 한번 값을 설정 할 수 있다.
                => 명시적 초기화 안된 경우만 가능
                => 객체별로 다른 상수값을 가질 수 있다.
                
  final, abstract는 반대의 의미를 가진다.              

 

📌

package chap7;

class FinalVlaue {
	final int NUM;// 처음 값을 선언할때 값을 넣어주면 상관이 없으나 값을 넣지 않은채 인경우 생성자에서 값을 한번은 변경 가능하다.
    final int[] ARR; //ARR 참조변수
	FinalVlaue(int num) {
		this.NUM = num; //상수값 초기화. 객체별로 다른 상수값 설정
		this.ARR = new int [5]; //한번 객체를 만들면 다른 객체 참조 불가
		for(int i=0;i<ARR.length;i++) {
			ARR[i] = (i+1)*10;
		}
	}
}
public class FinalVlaueEx1 {
	public static void main(String[] args) {
		final int NUM = 100;
		System.out.println(NUM); // 상수는 대문자로 정하는 것이 권장사항
//오류:	NUM=200; //NUM 상수 값은 변경 불가.
		System.out.println(NUM);
		FinalVlaue f1 = new FinalVlaue(10);
		FinalVlaue f2 = new FinalVlaue(20);
		System.out.println(f1.NUM);
		System.out.println(f2.NUM);
		for(int a : f1.ARR) 
			System.out.print(a+",");
		System.out.println();
		f1.ARR[0] = 100; //요소값 변경
		f1.ARR[1] = 200;
		for(int a : f1.ARR) 
			System.out.print(a+",");
	}
}

  • Final 메서드
final 제한자 :  변경불가
  
final 메서드 : 재정의 불가 메서드. 오버라이딩 불가 메서드
               final, abstract 예약어는 함께 사용 불가

 

📌

package chap7;

public class FinalMethod {
	public final void method() { //final 메서드. 오버라이딩 불가.
		System.out.println("FinalMethod 클래스의 method()");
	}
}
class subMethod extends FinalMethod {
	/*
	 * public void method() { System.out.println("SubMethod 클래스의 method()"); }
	 */
}

  • Final 클래스
 final 제한자 : 변경불가의 의미
  
 final 클래스 : 변경하지 마.라는 뜻
                상속 불가 클래스. 
                다른 클래스의 부모클래스가 될 수 없다.
                String 클래스가 final 클래스임 

 

📌

package chap7;

public class FinalClass {}
class subClass extends FinalClass {}