* final
"마지막, 최종의 "
final 키워드는 클래스, 메서드, 변수에 적용되며 abstract와 동시에 사용될 수 없다.
final클래스의 경우에는 상속이 안된다. 즉, 서브클래스를 가질 수 없다.
final메서드는 재정의를 할 수 없다.
final 변수는 값을 변경할 수 없다.
*final class
클래스 선언 시 final을 사용하면 그 클래스는 상속이 불가능해진다.
final클래스는 자식 클래스를 가질수 없고, 오직 오부에서 객체 생성을 통해서만 사용이 가능하다.
final클래스의 대표적인 예가 String클래스다. 사용자가 임의로 String클래스를 상속받아 메서드를 재정의하는 것을 방지하기 위한것이다.
*final 변수
final변수는 한번 값을 할당하면 그 값을 변경할 수 없다.
final변수는 선언시에 초기화하는 방법과 생성자를 통하여 초기화하는 방법이 있는데 만약 초기화하지 않고 남겨두면 컴파일 에러가 발생된다.
상수(static final)
자바에서는 불변의 값을 저장하는 필드를 상수(constant)라고 부른다.
상수는 객체마다 저장할 필요가 없는 공용성을 가져야 하며, 여러가지 값으로 초기화 될수 없기 때문에 static과 final제한자를 동시에 붙여 선언한다.
상수이름은 모두 대문자로 작성하는 것이 관례이다. 연결된 단어라면 (_)로 단어들을 연결해준다.
*final method
final메서드는 자식 클래스에서 부모클래스의 메서드를 재정의하지 못하게 한다.
하지만 클래스에 final이 붙지 않는다면 상속은 가능하므로 자식 클래스에서 final메서드의 참조는 가능하다.
자식 클래스에서 반드시 부모의 메서드를 기능의 변경없이 사용하도록 강요할 경우에 final메서드를 선언한다.
실습1. final변수
package final_field;
public class Person {
/*
- final변수는 한 번 값이 대입되면 값을 변경할 수 없는 특징이
있기 때문에 선언시에 직접 초기화하거나 생성자를 통한 초기화 로직을
작성하여 데이터가 반드시 한번 저장될 수 있게 해야한다.
*/
public final String nation = "대한민국";
public final String name;
public int age;
public Person(String name) {
this.name = name;
}
}
package final_field;
public class MainClass {
public static void main(String[] args) {
Person kim = new Person("김한국");
// kim.nation = "미국";
// kim.name = "김마이클";
kim.age = 17;
kim.age = 27;
System.out.println("국적: " + kim.nation);
System.out.println("이름: " + kim.name);
System.out.println("나이: " + kim.age);
Person park = new Person("박중국");
park.age = 30;
System.out.println("국적: " + park.nation);
System.out.println("이름: " + park.name);
System.out.println("나이: " + park.age);
}
}
----------------결과
국적: 대한민국
이름: 김한국
나이: 27
국적: 대한민국
이름: 박중국
나이: 30
실습2.상수(static final)
package final_.constant;
public class Earth {
public static final double EARTH_RADIUS = 6400; //JAVA에선 상수는 볼드체로..
public static final double EARTH_SURFACE_AREA;
static {
EARTH_SURFACE_AREA
= 4 * EARTH_RADIUS * EARTH_RADIUS * Math.PI;
}
public static void main(String[] args) {
System.out.println("지구의 반지름: "
+ Earth.EARTH_RADIUS + "km");
System.out.println("지구의 표면적: "
+ Earth.EARTH_SURFACE_AREA + "km^2");
}
}
'IT' 카테고리의 다른 글
프린터 오프라인 상태로 인쇄 안될 때 해결 방법 (0) | 2022.09.28 |
---|---|
15-2. 자바 - 사용제한자 추상화(abstract) (0) | 2022.09.27 |
15. 자바 - 사용제한자 static (1) | 2022.09.26 |
13-1. 자바 - 은닉 (1) | 2022.09.25 |
13. 자바 - 접근제한자 (0) | 2022.09.25 |