도담이 먹여 살려야하는 집사

final 본문

JAVA

final

천재도담 2020. 8. 27. 16:52

final필드 

final필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정할 수 없는것 

final 타입 필드 [=c 초기값];

초기값을 주는 2가지 방법 

  1. 필드 선언시에 주는 방법 -> 단순 값일 경우
  2. 생성자에서 주는 방법 -> 복잡한 초기화 코드 필요 또는 객체 생성시에 외부데이터로 초기화 할 경우

-> 초기화하지 않은 final 필드를 그대로 남겨둘 경우 컴파일 에러 발생

 

상속할 수 없는 final클래스 

final class Car{} >> final Math >> 상속 금지 
Car클래스는 최종적인 클래스 이므로 상속 할 수 없는 클래스가 됨. 

재정의 할 수 없는 final클래스 

public final void print () >> 상속 >> 재정의 x(Override 금지)
public static final void print () {} >>객체간 공유함수 
print 메소드는 최종적인 메소드 이고 부모 클래스를 상속해서 자식 클래스를 선언할때 부모클래스에 선언된 final메소드는 자식 클래스에서 
재정의 할 수 없음 .
class Vcard {
		final String KIND="heart";
		final int NUM=10;
	   void method() {
		   System.out.println(Math.PI);
	   }
}

class Vcard2{   //설계도 제작 상수 초기화 보장 ( 생성자)
	final String KIND;
	final int NUM;
	
	/*
	Vcard2(){
		this.KIND = "heart";
		this.NUM = 10;
	}
	*/
	//Vcard2(){}
	Vcard2(String kind , int num){ // 카드 53장의 모양과 숫자는 다르다 (한번 정해지면 변경 불가)
		 this.KIND = kind;
		 this.NUM = num;
	}

	@Override
	public String toString() {
		return "Vcard2 [KIND=" + KIND + ", NUM=" + NUM + "]";
	}
		
}

 

public class Ex07_Final {
	public static void main(String[] args) {
		Vcard v = new Vcard();
		//v.KIND = "AAA";
		v.method();

		Vcard2 v1 = new Vcard2("spade", 1);
		System.out.println(v1.toString());
		
		Vcard2 v2 = new Vcard2("spade", 2);
		System.out.println(v2.toString());
		
		
		Vcard2 v3 = new Vcard2("spade", 3);
		System.out.println(v3.toString());
		
		///v3.KIND = "aaa";
	}

}

상수 Constant : 불변의 값(Static final) <-> 변수

상수 자원 : 고유값(주민번호) , 수학 원주율 파이, 버전번호, 시스템 관리번호등...

 

final 필드와 다른점은 상수는 여러가지 값으로 초기화 될 수 없고 final필드는 객체마다 저장되고, 생성자의 매개값을 통해 여러가지 값을 가질 수 있기 때문

 

공통점 :  객체마다 저장할 필요가 없는 공용성 

 

상수는 static이면서 final이어야 함 -> static final필드는 객체마다 존재하지 않고 클래스에만 존재함. 한 번 초기값이 저장되면 변경할 수 없음 

static final 타입 상수 = 초기값;
static final String PLUS = "+";
static final String MINUS = "-";
static final String MUL = "*";
static final String DIV = "/";
static final String REM = "%";

상수 이름은 모두 대문자로 작성하기! 

만약 서로 다른 단어가 혼합된 이름이라면 _(언더바)를 사용해서 단어들을 연결 

'JAVA' 카테고리의 다른 글

List Collection Class (추가예정)  (0) 2020.09.01
This  (0) 2020.08.31
Generic Type  (2) 2020.08.26
Array_Basic  (0) 2020.08.23
상속(Inheritance)-1  (1) 2020.08.19
Comments