부모 클래스에 정의된 기능을 자식 클래스에 적합하게 수정해서 재정의하는 것을
메서드 오버라이딩이라고 함
한마디로 메서드재정의. 덮어쓰기. overwrite
cf) 오버 로딩: 파라미터가 다른 것을 여러 개 만드는 것
1)기존 슈퍼클래스의 메서드와 동일하게 생긴 메서드를 정의하게 되므로
서브 클래스에서는 더 이상 슈퍼클래스의 메서드가 보이지 않고
자신이 오버라이딩 상속_메서드오버라이딩(overriding) 한메 서드만 보이게 됨
(즉, 슈퍼클래스의 메서드는 은닉된다)
2) 슈퍼클래스의메서드에 기능을 추가하는 등 메서드 내용이 필요할 때 사용
3) static, final, private 제한자가 지정된 메서드는 오버라이딩 불가
반드시상속관계가 전제되어 있어야 한다
부모랑 똑같이 생긴 것을 만들어야 한다.
1. 메서드 이름은 조상 클래스의 메서드 이름과 같아야 한다
2. 매개변수의 개수, 타입, 순서는 조상 클래스의 메서드와 같아야 한다
3. 리턴 타입은 조상 클래스의 메서드와 같아야 한다
=> 리턴타입은 상속관계에 있는 서브 클래스 타입으로 변경은 가능함
----메서드 시그니쳐(메서드명, 리턴타입, 파라미터)가 일치해야 함---
즉, 메서드 선언부를 동일하게 하고 구현부만 다시 작성하라는 말이다
5. 접근 제한자는 부모 클래스의 메서드와 범위가 같거나 넓어야 한다
6. 부모 클래스의 메서드보다 더 상위의 예외를 던질 수는 없다
오버라이딩 단축키 : Alt + Shift + S -> V
@Override
public void jump() { // Person 클래스의 jump() 메서드는 더 이상 보이지 않는다!
System.out.println("SpiderMan의 점프!");
}
@Override는 단순 주석이 아니라
이 메서드는 재정의한 메서드니까 메서드 오버라이딩 규칙에 맞지 않으면
오류를 발생시키라는 정보를 JVM에게 전달한다
아래 예제를 보면 상속을 쓰면 cry라는 메서드로 통일했지만,
dog가 부르면 멍멍, cat을 부르면 야옹이라는 결과가 나온다
결과: 코드의 통일성이 보인다
메서드 오버라이딩뿐만 아니라 멤버 변수도 오버라이딩이 가능하다
즉, 메서드도 덮어쓸 수 있지만 멤버 변수도 덮어쓸 수 있다
만약 슈퍼클래스의 멤버 변수와 동일한 이름의 멤버 변수를
서브 클래스에서 선언하면 슈퍼클래스의 멤버 변수는 은닉된다
은닉된 슈퍼클래스의 멤버 변수의 변수를 은닉 변수라고한다
"부모 클래스에 정의된 기능을 자식 클래스에 적합하게 수정해서 재정의하는 것을
메서드 오버라이딩이라고 함
한마디로 메서드 재정의. 덮어쓰기"
ㅣ읽느라 수고 많으셨어요~ㅣ
부족한 글을 읽어주셔서 감사드립니다
아직 부족한 게 많으니
틀린 곳이 있다면
조언의 말씀 꼭 부탁드립니다!!!!
[JAVA] 자바_상속의 골치덩이 super, this 뽀개기 (0) | 2020.07.01 |
---|---|
[JAVA] 자바 _상속(inheritance)제대로 파고들기!! (0) | 2020.06.28 |
자바_이보다 더 쉬운 인터페이스 (interface)는 없다 (0) | 2020.06.22 |
자바_프로그램언어라는게 도대체 뭐지? (0) | 2020.06.18 |
자바의 참조형(레퍼런스)의 형변환에 도전하기!!! (업캐스팅/다운캐스팅)(Up Casting/Down Casting) (0) | 2020.06.16 |