안드로이드 개발자의 창고
[7일차 Java] final 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 Final이란?
- 더이상 변경할 수 없다는 의미를 가지고 있다.
final 변수
- final 변수 : 변수에 다른 값을 저장할 수 없다.
- final 변수는 변수를 선언한 이후에 값을 저장할 수 없다.
- 이에, 변수를 선언할 때 값을 저장해줘야 한다.
- 상수 역할을 할 변수를 정의할 때 사용한다.
final 메서드
- 자식 클래스에서 overriding이 불가능하다
final 클래스
- 상속이 불가능하다.
- 무조건 객체를 생성해서 참조변수를 통해 접근할 수 있도록 하기 원할 경우 사용한다.
📖 예제 코드
public class MainClass {
public static void main(String[] args) {
TestClass1 t1 = new TestClass1();
System.out.printf("t1.FINAL_VALUE : %d\n", t1.FINAL_VALUE); // 100
t1.FINAL_VALUE = 200; <<< 불가능
}
}
class TestClass1 {
final int FINAL_VALUE = 100;
}
class SuperClass1 {
public final void method1() {
System.out.println("SuperClass1의 method1");
}
}
class SubClass1 extends SuperClass1 {
public void method1() {
System.out.println("SubClass1의 method1"); <<< 불가능
}
}
// final class
final class SuperClass2{
}
class SubClass2 extends SuperClass2 { <<< 불가능
}
✔️ Main Class 코드 해석
public class MainClass {
public static void main(String[] args) {
TestClass1 t1 = new TestClass1();
System.out.printf("t1.FINAL_VALUE : %d\n", t1.FINAL_VALUE); // 100
t1.FINAL_VALUE = 200; <<< 불가능
}
}
- System.out.printf("t1.FINAL_VALUE : %d\n", t1.FINAL_VALUE);
- TestClass1에 있는 final 변수를 가져와 출력한다.
- 100이 출력된다.
- t1.FINAL_VALUE = 200;
- FINAL_VALUE를 선언할 때 값(100)을 넣었기 때문에 변경되지 않는다.
- 오류가 발생한다.
✔️ SuperClass1과 SubClass1 코드 해석
class SuperClass1 {
public final void method1() {
System.out.println("SuperClass1의 method1");
}
}
class SubClass1 extends SuperClass1 {
public void method1() {
System.out.println("SubClass1의 method1"); <<< 불가능
}
}
- public void method1() { ...
- SuperClass1의 final 메서드 오버라이딩을 시도하고 있다.
- final 메서드는 자식클래스에서 오버라이딩이 불가능하다.
- 오류가 발생한다.
✔️ SuperClass2와 SubClass2 코드 해석
// final class
final class SuperClass2{
}
class SubClass2 extends SuperClass2 { <<< 불가능
}
- class SubClass2 extends SuperClass2 { ...
- final 클래스는 상속이 불가능하다.
- SuperClass2에 접근하려면 객체 생성을 통해 접근해야 한다.
- 오류가 발생한다.
'Computer > Java' 카테고리의 다른 글
[7일차 Java] Abstract (2) | 2023.05.06 |
---|---|
[7일차 Java] 중첩 클래스 (0) | 2023.05.06 |
[7일차 Java] Static (0) | 2023.05.06 |
[6일차 Java] 캡슐화 (0) | 2023.05.05 |
[6일차 Java] 접근 제한자 (2) | 2023.05.05 |