-
[자바] final자바 2022. 8. 5. 11:36728x90
final
추상과는 다르게 변경 및 상속이 불가능하다.
1. field 안에서 final 사용법 ( 값의 변경이 불가능 ) class Cal { static final double PI = 3.14; int left, right; public void setOprands(int left, int right) { this.left = left; this.right = right; Cal.PI = 6; // error } /* ... */ sum, avg() 메소드 } public class CaleDemo { public static void main(String[] args) { Cal c = new Cal(); Cal.PI = 6; // error } } 2. 메소드에서 final -> 오버라이딩이 되지 않는다 class A { final void b() {} } class B extends A { void b() {} // error } 3. 클래스 final -> 상속 불가능 final class A { final void b() {} } class B extends A {} // error
또 다른 예시
final class Final { // 조상이 될 수 없는 클래스 final int MAX_SIZE = 200; // 상수 ( 멤버변수 ) final void getMaxSize() { // 오버라이딩을 할 수없는 메서드 final int LV = MAX_SIZE; // 상수( 지역변수 ) return MAX_SIZE; } }
final이 붙은 벼수는 일반적으로 선언과 동시에 초기화 하지만, 인스턴스벼수는 생성자에게 초기화 되도록 할 수 있다.
class Card { final int NUMBRE; final String KIND; static int w = 100; static int h = 100; Card(String kind, int num) { // 이 부분이 생성자에 의해서 final이 붙은 변수를 초기화 하는 것이다. KIND = kind; NUMBER = num; } Card() { this KIND + " " + NUMBER; } public String toString() { return KIND + " " + NUMBER; } } class FinalCard { public static void main(String[] args) { Card c = new Card("HEART", 10); c.NUMBER = 5; // 에러, cannot assign a value to final variable NUMBER System.out.println(c.KIND); // 이렇게 해야함 } }
'자바' 카테고리의 다른 글
[자바] 다형성 (0) 2022.08.06 [자바] 인터페이스 (0) 2022.08.05 [자바] abstract 추상 (0) 2022.08.05 [자바] 접근제어자 (0) 2022.08.05 [자바] API와 API문서 보는 방법 (0) 2022.08.05