- 오버라이드(override)
부모 클래스의 메서드를 자식 클래스에서 또 구현하는 것을 재정의(override)라고 부른다.
부모 클래스의 메소드를 자식 클래스에서 재정의하기 위한 규칙은 다음과 같다.
- 메소드 이름이 정확히 일치해야 한다.
- 파라미터 변수의 수와 타입이 일치해야 한다.
- 리턴 타입이 일치해야 한다.
재정의된 메서드에는 @Override 어노테이션을 붙여주는 것이 바람직하다.
붙이지 않아도 에러가 발생하는 것은 아니다.
그렇지만, @Override 어노테이션을 붙여주면, 실수를 막을 수 있어서 좋다.
오타 등의 실수로 재정의 규칙이 깨지게 되면, 컴파일 에러가 발생하므로 @Override 어노테이션을
명시함으로서 그러한 상황을 피할 수 있다.
- 업캐스팅, 다운 캐스팅(up-casting, down-casting)
Parent p;
Child c;
p = new Parent("부모1");
c = new Child("아들1", 18);
p = new Child("아들2", 16);
Parent 객체를 가르키기 위한 참조 변수 p를 선언한다. (부모 클래스의 객체)
Child 객체를 가르키기 위한 참조 변수 c를 선언한다. (자식 클래스의 객체)
Parent 타입의 참조 변수에 Parent 객체를 대입하는 것은 아무 문제없다.
Child 타입의 참조 변수에 Child 객체를 대입하는 것은 아무 문제없다.
Parent 타입의 참조 변수에 Child 객체를 대입하는 것은 허용된다. 이를 up-casting이라고 부른다.
c = new Parent();
c = p;
Child 타입의 참조 변수에 Parent 객체를 대입하는 것은 컴파일 오류가 발생한다.
참조 변수 p가 가리키는 것은 위에서 생성된 Child 객체이다.
이 Child 객체에 대한 참조를, Child 타입의 참조 변수 c에 대입하는 것인데도 컴파일 에러가 발생한다.
컴파일 에러가 발생하는 이유는,
Parent 객체 타입의 참조 변수의 값을, Child 객체 타입의 참조 변수에 대입하기 때문이다.
이것은 컴파일 에러이다.
참조 변수에 동일한 타입의 참조 값을 대입하는 것은 당연히 아무 문제없다.
자식 객체 타입의 참조 값을 부모 객체 타입의 참조 변수에 대입하는 것은 문제없다. (up-casting)
부모 객체 타입의 참조 값을 자식 객체 타입의 참조 변수에 대입하는 것은 컴파일 에러다. (down-casting)
'Study > Java' 카테고리의 다른 글
[Java] auto boxing & auto unboxing (7) | 2020.05.03 |
---|