17. final 키워드 [ Tutorial17 ]
절대로 변하지 않는 특정한 것을 사용할 때 final을 사용한다. 변수 메소드 클래스에 모두 사용할 수 있다.
변수의 경우, 변하지 않는 상수로
메소드의 경우, 상속한 자식클래스에서 오버라이딩(재정의)가 불가능한 메소드
클래스의 경우, 상속이 불가능한 완전한 클래스가 된다.
[정리] final을 사용해서, 더이상 바뀌지 않게 보호하는 기능을 한다고 할 수 있다.
cf) 인터페이스의 필드는 모두 final이 생략되어있다.
[1] final 상수를 만들어보자.
1. final 변수(상수)를 만들어보자. 이 때, 어떠한 수를 다시 대입하면 오류가 난다.
final int number = 10;
System.out.println(number);
number=5; //오류가 난다.
[2] final 메소드를 만들어보자.(1 ~3 까지는 final이 아니라서, 재정의된 오버라이딩 메소드를 호출한다.)
1. Parent클래스를 만들고, 출력문을 가진 메소드 show()를 만들자.
public class Parent {
public void show() {
System.out.println("Hi from Parent");
}
}
2. 메인클래스에서 Parent 클래스를 상속받고, (STATIC 메인메소드에서도, 재정의한 메소드를 호출할 수 있게)메인클래스 객체를 생성해서,
부모parent에 있는 show()메소드를 이용해보자.
public class Main extends Parent{
public static void main(String[] args) {
Main main = new Main();
main.show();
}
}
3. 이제 부모클래스의 show()를 오버라이딩 해서, 재정의한 show();가 호출되도록 해보자.
public class Main extends Parent{
@Override
public void show() {
System.out.println("hello from Main");
}
public static void main(String[] args) {
Main main = new Main();
main.show();
}
}
4. 이제 Parent 클래스의 show()메소드에 final을 붙혀보자. -> 자식인 Main클래스에서 오버라이딩 한 곳에서 오류가 난다.
***final이 붙은 메소드는, 부모클래스의 것이더라도 자식이 오버라이딩해서 사용 못한다!
public final void show() {
System.out.println("Hi from Parent");
}
[3] 클래스에 final을 붙혀보자.
1. Parent클래스에 public을 빼고, final class로 바꿔보자. => 상속한 자식인 Main클래스에서 오류가 난다.
*** final이 붙은 클래스는, 다른 클래스에서 더이상 상속하지 못한다.
MY) 완전한 설계도이므로, 객체를 생성해서 사용할 수 밖에 없다. 상속할 자식은 더이상 존재할 수 없음.
[정리] final을 사용해서, 더이상 바뀌지 않게 보호하는 기능을 한다고 할 수 있다.
'Java > 기초 튜토리얼' 카테고리의 다른 글
19. 다형성(Polymorphism) [Tutorial 19] (0) | 2018.02.21 |
---|---|
18. 인터페이스(interface) [ Tutorial18 ] (0) | 2018.02.21 |
16. 추상(Abstract) [Tutorial16] (0) | 2018.02.21 |
15. 상속과 super - (자식클래스가 부모의 필드까지 이용하기) [Tutorial15] (4) | 2018.02.20 |
14. 클래스 ( priavte 필드->public get( )/set( ) + 생성자 / Node클래스로 중앙좌표 구하기 ) [ Tutorial14 ] (0) | 2018.02.20 |