Ⅲ. 메소드 오버라이딩(Overriding)
1. 메소드 오버라이딩(Overriding)
- 메소드 오버라이딩
- 부모클래스에게 상속받은 메소드를 재정의하여 사용 (덮어쓰기 개념)
- 메소드 오버라이딩을 위한 조건
- 부모클래스의 메소드와 시그니처 및 리턴 타입 동일
- 부모클래스의 메소드보다 접근지정자는 같거나 넓어야 함
2. 메소드 오버라이딩 (Method Overriding)의 메모리 구조
- 객체내에 동일한 멤버가 두개 이상 있는 경우 :
참조변수가 가리키는 객체의 바깥쪽부터 안쪽으로 들어가면서 첫번째 만나는 멤버가 실행
※ 메소드 오버라이딩 효과
- 메모리를 재사용하므로 메모리 절약
- 메소드명을 재사용하므로 기능 파악 용이
// Example1
package sample;
class A {
void print() {
System.out.println("A 클래스");
}
}
class B extends A {
@Override // (@Override : 이 구문은 Override 라고 표시 (선택사항))
void print() {
System.out.println("B 클래스");
}
}
public class Test {
public static void main(String[] args) {
// 1. A 타입 / A 생성자
A aa = new A();
aa.print(); //A 클래스
// 2. B 타입 / B 생성자
B bb = new B();
bb.print(); //B 클래스
// 3. A 타입 / B 생성자
A ab = new B();
ab.print(); //B 클래스
}
}
// Example 2
package sample;
class Animal {
void cry() {
System.out.println("끄앙");
}
}
class Chicken extends Animal {
@Override
void cry() {
System.out.println("꼬끼오");
}
}
class Dog extends Animal {
@Override
void cry() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Animal aaa = new Animal();
aaa.cry(); // 끄앙
Chicken bbb = new Chicken();
bbb.cry(); // 꼬끼오
Dog ccc = new Dog();
ccc.cry(); // 멍멍
Animal abb = new Chicken();
abb.cry(); // 꼬끼오 (메소드 오버라이딩 되어 Chicken안에 메소드가 실행됨)
Animal acc = new Dog();
acc.cry(); // 멍멍 (메소드 오버라이딩 되어 Dog안에 메소드가 실행됨)
}
}
3. 메소드 오버라이딩 (Method Overriding) vs. 메소드 오버로딩 (Method Overloading)
4. 메소드 오버라이딩 (Method Overriding)과 접근지정자
- 오버라이딩 시 자식클래스의 메소드 접근지정자는 부모의 접근지정자보다 같거나 커야 함 (즉, 좁혀질 수 없음)
※ 접근 지정자의 범위 : public > protected > 안씀 > private
// Example
package sample;
class A {
protected void abc() {}
}
class B1 extends A {
public void abc() {}
}
class B2 extends A {
protected void abc() {}
}
class B3 extends A {
//void abc() {} //default 접근지정자 (좁아져서 불가능)
}
class B4 extends A {
//private void abc() {} //private 접근지정자 (좁아져서 불가능)
}
public class Test {
public static void main(String[] args) {
}
}
'Programming Language > Java' 카테고리의 다른 글
상속과 다형성 - 5. super와 super( ) (0) | 2022.07.12 |
---|---|
상속과 다형성 - 4. 필드와 static 멤버(필드/메소드)의 중복 (0) | 2022.07.12 |
상속과 다형성 - 2. 객체의 타입변환 (0) | 2022.07.12 |
상속과 다형성 - 1. 클래스의 상속 (0) | 2022.07.12 |
자바 제어자1 (modifier) - 2. Static (0) | 2022.07.12 |