final은 초기값이 저장되면 최종적인 값이 되어 프로그램 실행 도중에 수정할 수 없다.
final int a = 1;
fianl 필드는 위와 같이 선언한다. 초기값을 줄 수 있는 방법은 두가지 방법밖에 없다.
필드 선언시에 주거나 생성자를 통해서 주는 방법이 있다.
class Company {
String name = "회사";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class finalStudy {
public static void main(String[] args) {
final Company company = new Company();
//company = new Company(); //재성성 불가능
company.setName("회사!!"); //필드 변경 가능
}
}
객체 변수에 final로 선언하면 그 변수에 다른 참조 값을 지정할 수 없다.
객체자체는 변경이 불가능하지만 객체 내부 변수는 변경할 수 있다.
final class Company{
String name = "회사명";
}
//class A_Company extends Company{ } //상속 받을수 없다
클래스의 final을 사용하면 크 클래스는 최종상태가 되어 더이상 상속이 불가능하다.
필드는 Setter함수를 통하여 변경은 가능하다
class Company{
String name = "회사명";
public final void print() {
System.out.println(name);
}
}
class A_Company extends Company{
String name = "a회사";
//public void print() { } //메서드 오버라이드 불가능
}
메서드에 final을 사용하면 상속받은 클래스에서 부모의 fianl 메서드를 재정의 할 수 없다.
Object 클래스는 모든 클래스의 최상위 클래스로 모든 클래스는 Object 클래스에서 상속을 받는다. 모든 클래스는 Object 클래스의 메서드를 사용 가능하고 그 중 일부는 재정의 하여 사용할 수 있다.