final 클래스와 final 메소드
final 키워드! 클래스, 필드, 메소드 선언 시 사용할 수 있는데. 최종상태고 절대 수정할 수 없단 말이다. 메소드는 할당 된 값을 바꿀 수 없다는 걸 알겠는데.. 그럼 클래스와 메소드에서 final 키워드를 지정한다는 건 무슨 의미일까?
클래스
public final class 클래스 {...}
이건 상속!이 불가능 하단 말이다.
java의 대표적인 예는 자바 표준 API에서 제공하는 String 클래스이다.
이런 식으로 선언 되어 있다. →
public final class String {..}
public class newString extends String() {...} // 삐-! 안 됨
왜 쓰는가?
아까 오버라이딩 할 때 봤던 그림이다.
상위 클래스의 내용을 바꾸면 아래 하위 클래스 다 영향을 끼치게 된다.
그래서 상위 클래스 메소드를 final 키워드 써서 못 바꾸게 하는 용도로 쓰인다.
참고
https://hashcode.co.kr/questions/388/자바에서-final-클래스는-어디에-사용하나요
메소드
메소드 선언 시 final 붙이면 더 이상 바꿀 수 없다. 즉 오버라이딩 할 수 없는 메소드가 된다.
public class Car{
public int speed;
public void speedUp() { speed+= 1;}
public final void stop(){
System.out.println("차 멈춤");
speed =0;
}
}
public class SportsCar extends Car{
@Override
public void speedUp() { speed += 10; }
// 오버 라이딩 할 수 없음!
@Override
public void stop(){
System.out.println("스포츠카를 멈춤");
speed = 10;
}
}
반응형
'Java' 카테고리의 다른 글
상속 : 타입 변환과 다형성 (0) | 2021.03.07 |
---|---|
상속 : Protected 접근 제한자 (0) | 2021.03.07 |
상속 : 메소드 재정의(오버라이딩) (0) | 2021.03.07 |
상속 : 상속의 개념 (0) | 2021.03.07 |
참조타입 (0) | 2021.03.04 |
Uploaded by Notion2Tistory v1.1.0