참고 도서
Do it 자바 완전정복
final 제어자는 필드, 지역변수, 메서드, 클래스 앞에 위치할 수 있다
fianl 제어자는 변수를 선언할 때만 지정할 수 있으며 final 변수는 한번 대입된 값을
수정할 수 없다.
어떤 필요에 따라 복사본을 하나 만들어 놓음으로써 원본이 삭제 된 이후에도 그 값을 활용 할 수 있게 하는 것이 final변수의 기능이다
class Test{
int a = 3;
final int b = 2;
}
A a = new A();
a.a = 5; //가능
a.b = 8; //불가능
final 메서드와 final 클래스의 기능은 직관적이다.
final 변수와 마찬가지로 final 메서드와 final 클래스도 각각 최종 메서드, 최종 클래스의 의미를 지닌다.
즉, 메서드를 final로 정의하면 자식 클래스에서 해당 메서드를 오버라이딩할 수 없다.
class Test{
final void save(){
}
}
class Test2 extends Test{
void save(){} //불가능
}
final class Test{}
class Test2 extends Test{} //불가능
abstract의 사전상 의미는 추상적인이다. abstract가 붙은 메서드를 추상메서드
abstract가 붙은 클래스를 추상클래스라 한다.
'추상적'이라는 의미는 '구체적이지 않다'는 것이다.
추상메서드는 쉽게 중괄호가 없는 메서드라고 생각하면 된다
abstract 리턴 타입 메서드명();
추상 메서드는 아직 무슨 기능을 정의할지 정해지지 않은 미완성 메서드라고 생각하자
// 추상 메서드를 1개 이상 포함하고 있으므로 추상클래스로 정의
abstract class Test1{
abstract void save(); //추상 메서드
}
class Test2 extends Test{
void save(){
System.out.println("save");
}
}
Test1 t = new Test2();
t.cry(); //save
1. 상속을 통해 중복 코드를 줄일 수 있다.
2. 자식 클래스를 그룹화할 수 있다.
3. 비 실존 객체의 직접 생성 차단하여 실수를 사전에 방지한다.