[JAVA] FINAL 키워드
@욕심쟁이
·2020. 9. 2. 14:06
반응형
Final
- 클래스, 메서드, 변수 선언 시 변경의 마지막을 표시
- 멤버변수에 final 사용시 : 변수 값 변경 금지(= 상수로 취급됨)
→ final키워드가 붙은 변수(상수)는 일반 변수와 구분하기 위해 대문자 변수명을 작성함(단어구분은 언더바(_)사용)
- 메서드에 final 사용시 : 메서드 변경 금지(= 오버라이딩 금지)
- 클래스에 final 사용시 : 클래스 변경 금지(= 상속 금지) → 대표적인 final클래스 : java.lang.String, java.lang.Math 등
1.멤버변수에 final키워드 사용
public class Ex3 {
public static void main(String[] args) {
FinalVariable f = new FinalVariable();
f.num1 = 100;
// f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
System.out.println();
}
}
//1.멤버변수에 final키워드 사용
class FinalVariable{
int num1 = 10; //일반 멤버변수(차후에 값 변경 가능)
//final int num2 =20; // 상수로 취급됨(차후에 값 변경 불가능)
final int NUM2 =20; // 일반적으로 상수는 대문자로 표기
final String SCHOOL_NAME="아이티윌"; //단어구분은 언더스코어(_)사용
}
2. 메서드에 final키워드 사용
public class Ex3 {
public static void main(String[] args) {
FinalVariable f = new FinalVariable();
f.num1 = 100;
// f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
System.out.println();
}
}
//2.메서드에 final키워드 사용
class FinalMethod{
public void nornalMethod() {
System.out.println("일반메서드!");
}
public final void finalMethod() {
System.out.println("finals 메서드!");
}
}
class FinalMehodSubClass extends FinalMethod{
public void nornalMethod() {
System.out.println("일반메서드!");
finalMethod();//final메서드 호출은 가능
}
/* final제한자가 사용된 메서드는 오버라이딩 불가능
public void finalMethod() {
System.out.println("finals 메서드!");
}
*/
}
3. 클래스에 final키워드 사용 → 상속금지
public class Ex3 {
public static void main(String[] args) {
FinalVariable f = new FinalVariable();
f.num1 = 100;
// f.b=10; //final키워드가 선언된 변수(상수)는 값 변경 불가능
System.out.println();
}
}
//3. 클래스에 final키워드 사용 => 상속금지
final class FinalClass{}
//final제한자가 붙은 클래스를 상속 받는 경우
//=>상속 불가능한 클래스 이므로 오류발생
//The type FinalClassSubClass cannot subclass the final class FinalClass 에러발생
//class FinalClassSubClass extends FinalClass{}
class HasAClass{
//final클래스는 상속 불가능하지만, 이스턴스 생성을 통해 사용가능
FinalClass fc = new FinalClass();
}
반응형
'IT > JAVA' 카테고리의 다른 글
[JAVA] INSTANCEOF 연산자 (0) | 2020.09.08 |
---|---|
[JAVA] 형변환(기본형변환/참조형변환[upcasting/downcasting]) (0) | 2020.09.07 |
[JAVA] 상속(Inheritance)[부모(슈퍼)클래스/ 자식(서브)클래스]1 (0) | 2020.08.31 |
[JAVA] this키워드 (0) | 2020.08.21 |
[JAVA] 생성자 오버로딩(생성자 다중정의) (0) | 2020.08.21 |