티스토리 뷰
반응형
오버라이딩이란?
조상(부모) 클래스를 상속받은 자식 클래스를 작성할 때, 상속받은 메소드의 기능을 재정의 하는 것이다.
언제 사용할까?
상속받은 메소드 중 자식 클래스에서 사용할 수 없는 경우나, 자식 클래스를 만드는 개발자의 입장에서 메소드의 기능을 재정의를 하고 싶을 때 사용한다. (모든 클래스를 한명의 개발자가 만드는 것이 아님을 항상 염두하자)
오버라이딩 선언 조건
- 상속받은 메소드와 오버라이딩한 메소드의 이름이 같아야 한다.
- 상속받은 메소드와 오버라이딩한 메소드의 매개변수가 같아야 한다. (매개변수의 타입, 갯수)
- 상속받은 메소드와 오버라이딩한 메소드의 리턴타입이 같아야 한다.
오버라이딩시 주의사항
- 오버라이딩 된 경우, 부모클래스의 메소드는 무시되고 자식클래스의 오버라이딩 된 메소드가 호출된다.
- 자식 클래스에서 조상 클래스보다 접근제어자를 더 좁게 바꿀 수 없다. (public > protected > default > private)
- 자손 클래스에서 조상 클래스보다 예외를 더 많이 처리 할 수 없다.
- 인스턴스 메소드를 클래스 메소드(static)으로 바꿀 수없다. 마찬가지로 클래스 메소드(static)을 인스턴스 메소드로 바꿀 수 없다.
- 자손 클래스에서 인스턴스를 생성할 때, 조상 클래스의 멤버도 초기화를 해야 하므로, 조상 클래스의 ’기본’ 생성자를 이용한 작업도 진행한다. (자손 클래스의 생성자가 어떤 것이더라도 조상의 ‘기본’ 생성자를 이용한다.) (자바의정석 연습문제 7-5, 7-6)
- 오버라이딩은 메소드에만 국한되는 것으로, 같은 이름의 변수가 있더라도 오버라이딩 되지 않는다. (자바의정석 연습문제 7-20)
- 오버라이딩을 하다보면 부모클래스 코드와 많은 중복이 발생하게 될 수도 있다. 이런 경우 super키워드를 적절히 사용하면 코드의 중복을 피하고, 간결하게 작성할 수 있다.
반응형
'Java' 카테고리의 다른 글
제네릭스(Generics) - 4. 제네릭 메소드 (0) | 2018.11.05 |
---|---|
제네릭스(Generics) - 3. 와일드 카드 <?> (6) | 2018.11.04 |
제네릭스(Generics) - 2. 제네릭 클래스 선언하기 (0) | 2018.11.03 |
제네릭스(Generics) - 1. 제네릭 사용 방법 (0) | 2018.11.02 |
메소드 오버로딩(method overloading) (0) | 2018.10.31 |
댓글