학습목표 : final 키워드에서 주의할 점을 알아본다.
final 은 최종이다.
클래스, 변수, 메소드에서 여기가 마지막이라는 표시를 해준다.
아래 예시를 통해 익혀보자.
1. final Class
- 최종 Class 로 final 은 상속을 허락하지 않겠다는 의미이다.
- 요즘말로, 딩크족이다. 아이를 낳지 않겠다니..
public final class Cat_Super {
}
// 상속을 허용하지 않아서 오류 발생
class Cat_Child extends Cat_Super {
}
2. final 변수 = 상수
- 변경 불가능한 변수 즉 상수가 된다.
- 단, 초기화 되지 않은 상수의 값은 static, 지역변수를 구분하여 초기화가 가능
package book.oopforsprings.lec04._final;
public class FinalMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat cat = new Cat();
}
}
class Cat {
final static int age=10;
final static int age2;
final int weight=20;
final int weight2;
// static 은 static 블록에서만 변경 가능
static {
// age=11; 최초 초기값이 있는 변수는 값을 받지 못함
age2=21; // 상수 초기화 가능
}
// 아래는 오류 발생.
public Cat() {
//weight=11; // final 상수의 변경은 허용되지 않음
weight2=21; //
}
}
3. final Method
- 최종 Method 로서 , 재정의(Overriding)을 할 수 없다.
public class Cat_Super {
public void doOK() {
}
// 내가 마지막이야.. 더 사용하지 못해
public final void doNO() {
}
}
class Cat_Child extends Cat_Super {
public void doOK() {
System.out.println("I can override of doOK method...");
}
//Cannot override the final method from Cat_Super
public void doNO() {
System.out.println("I can override of doOK method...");
}
}
'Java' 카테고리의 다른 글
[instanceof] 나는 어디 소속인가? (0) | 2021.05.12 |
---|---|
[Team Study] [Annotation] 자바 어노테이션에 대해 알아보자 (0) | 2021.05.12 |
[Interface & Extends] 이 둘의 단순하지만 OOP적인 Collaboration (0) | 2021.05.06 |
[Interface] 인터페이스에 대한 수준낮은 고찰 (0) | 2021.04.28 |
Abstract vs Interface (0) | 2021.04.24 |