자바 공부/[ 完 ] 자바 실전 - 기본편
9-2 상속과 메서드 오버라이딩
잘데친갈비
2024. 3. 14. 18:10
상속과 메서드 오버라이딩
- 부모 타입의 기능을 자식에서 다르게 재정의 하고 싶을 때 메서드 오버라이딩을 사용해 재정의 할 수 있다.
메서드 오버라이딩
→ 사용 방법 🔽
package extends1.overriding;
public class Car {
public void move() {
System.out.println("차를 이동합니다");
}
// 추가
public void openDoor() {
System.out.println("문을 엽니다.");
}
}
// 부모 class
→ 부모 class 를 상속 받아 move 메서드를 재정의 🔽
package extends1.overriding;
public class ElectricCar extends Car {
@Override // <- 오버라이딩 했다는 표시 필수
public void move() {
System.out.println("전기차를 빠르게 이동합니다");
}
public void charge() {
System.out.println("충전 합니다.");
}
}
// 자식 class
→ 이런 식으로 자식 class 에서 재정의 하여 사용 가능하다.
메서드 오버라이딩시 구조
→ 자식class 에서 부모 class 의 기능을 overriding 하면 다음과 같은 구조를 갖는다.🔽
→ ElectricCar 객체를 생성시켜보면 🔽
ElectritcCar electricCar = new ElectricCar();
electricCar.move();
→ 다음과 같은 객체 메모리 영역에 부모 class 와 자식 class 구역이 생성 되고 move() 메서드도 동일 하게 생성 된다.🔽
→ 자식 class 를 호출 했기 때문에 자식 move() 메서드를 먼저 탐색하고 존재 한다면 자식의 기능을 사용하고 부모 타입은 찾지 않는다.
추가 - 오버로딩, 오버라이딩의 차이
- 오버로딩 : 메서드의 이름은 갖지만 매개변수의 타입, 개수에 따라 다른 기능을 호출 하여 사용 하는 것을 오버로딩 이라고 한다.
- 오버라이딩 : 자식 class 가 부모 class 의 기능을 재정의 하여 자식의 기능으로 덮어 씌우는 것을 말한다.
메서드 오버라이딩 조건
- 메서드 이름이 동일
- 메서드 의 파라미터 타입, 순서, 개수가 동일
- 반환 타입이 동일
- 상위 메서드 보다 하위 메서드보다 더 제한되면 안된다. ex) 상위 [ protected ] , 하위 [ public, protected ] O 상위 [ protected ] , 하위 [ private , default ] X
- static, final, private 가 붙은 메서드는 오버라이딩 될 수 없다.
- 생성자는 오버라이딩 할 수 없다.