오버라이딩
슈퍼 클래스의 메소드를 서브 클래스에서 같은 이름, 같은 인수 타입 & 개수로 새롭게 정의하는 기능을 말합니다.
이때, 서브 클래스 객체에서 해당 메소드를 호출하면, 서브 클래스에서 정의한 메소드를 호출합니다.
슈퍼 클래스 객체로 서브 클래스 객체 다루기
서브 클래스 객체는 슈퍼 클래스 변수로 다룰 수 있습니다. 이 경우 자신의 객체의 타입과 맞는 메소드를 호출할 수 있습니다. 하지만, 서브 클래스에서 정의한 메소드는 서브 클래스 객체에서 이용할 수 없게 됩니다.
이렇게 하면 배열로 변수를 만들어 객체를 관리할 수 있게 됩니다.
같은 이름의 멤버 사용하기
위에서 서브 클래스 객체는 자신의 메소드를 호출한다는 것을 알았습니다. 그러면, 같은 이름의 멤버가 있을 경우 서브 클래스에서 슈퍼 클래스의 메소드, 필드를 사용하려면 어떻게 해야 할까요?
메소드나 필드 앞에 super.을 사용하면 됩니다.
이렇게 하면 서브 클래스의 멤버인지 슈퍼 클래스의 멤버인지 구분할 수 있습니다.
this.
this.을 사용하면 클래스의 필드를 나타냅니다. 따라서 this. 을 붙이는 경우 메소드 안의 지역변수가 아닌 클래스의 필드를 사용하게 됩니다.
final( )
finalize( )와는 다릅니다.
final 제한자는 클래스, 메소드, 필드에 사용할 수 있습니다.
클래스에 사용하면 해당 클래스는 서브 클래스를 만들 수 없습니다.
메소드에 사용하면 해당 메소드는 오버라이딩할 수 없습니다.
필드에 사용할 경우, 해당 필드의 값은 변경할 수 없습니다. 따라서, 반드시 필드를 초기화 해줘야 합니다. 이런 고정된 필드를 가리켜 "상수"라고 합니다.
'JAVA' 카테고리의 다른 글
[11] 추상 클래스 (0) | 2021.05.21 |
---|---|
[10] Object 클래스 (0) | 2021.05.21 |
[8] 상속 (0) | 2021.05.21 |
[7] 클래스 형 변수 (0) | 2021.05.21 |
[6] 접근 제한 (0) | 2021.05.21 |