메서드 재정의(method overriding)
- 부모 클래스에서 정의한 메서드를 자식클래스에서 다시 작성(재정의)하는 것
- 부모 클래스에 정의 된 메서드 중 하위 클래스와 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의 함 === > 메서드 오버라이딩
[메서드 재정의 특징]
1. 반드시 상속관계에서만 발생함
(↔ 메서드 다중정의 - 동일한 클래스에서 발생)
2. 부모 클래스의 원형 메서드를 자식 클래스에서 재정의(다시 작성)
[메서드 재정의 조건]
1. 반드시 접근 지정자, 리턴타입(반환형), 매개변수 모두 일치해야 함.
(<-> 메서드 다중정의 - 매개변수의 갯수가 다르든지, 자료형이 다르든지 해야함.)
2. 접근지정자는 확장은 가능, 축소는 불가능.
@Override
ctrl+space를 통해 자동으로 부모 클래스의 메소드를 오버라이딩 할 수 있다.
이 표시가 있으면 오타 방지를 해준다. 부모클래스에 있는 메소드를 감지해준다.
package overriding;
// 부모 클래스
class Animal {
void sound() {
System.out.println("소리를 냅니다.");
}
void color() {
System.out.println("검정색입니다.");
}
}
// 강아지 자식클래스
class Dog extends Animal{
//ctrl+space 눌러주면 자동으로 부모클래스의 메소드 오버라이딩
@Override
void sound() {
// super.sound();
System.out.println("멍멍멍"); // 부모 클래스의 원형메소드를 재정의
}
@Override
void color() {
//super.color();
System.out.println("하얀색입니다."); // 부모 클래스의 원형메소드를 재정의
}
}
// 호랑이 자식클래스
class Tiger extends Animal {
@Override
void sound() {
System.out.println("어흥어흥"); // 부모 클래스의 원형메소드를 재정의
}
}
// 고양이 자식클래스
class Cat extends Animal {
@Override
void sound() {
System.out.println("냥냥냥"); // 부모 클래스의 원형메소드를 재정의
}
}
public class Ex01_Animal {
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
dog.color();
Cat cat = new Cat();
cat.sound();
Tiger tiger = new Tiger();
tiger.sound();
}
}
결과
멍멍멍
하얀색입니다.
냥냥냥
어흥어흥
'Back-End > Java' 카테고리의 다른 글
[Java] 인터페이스(Interface) (0) | 2021.08.17 |
---|---|
[Java] 상속_추상클래스(abstracts class) (0) | 2021.08.17 |
[Java] 상속(inheritance) (0) | 2021.08.17 |
[Java] instance(인스턴스), static(스태틱, 정적) 변수/메소드 (0) | 2021.08.17 |
[Java] 객체(Object), 클래스(Class) (0) | 2021.08.16 |
댓글