오버라이딩
오버라이딩(Overriding)은 상속관계에 있는 부모클래스의 메서드를 자식클래스에서 재정의 하는것을 말한다. 오버라이딩을 통해 자식 클래스는 부모 클래스의 메서드를 자식의 필요에 맞게 변경하여 사용할 수 있다.
오버라이딩 규칙은 다음과 같다.
- 메서드 이름, 매개변수, 반환 타입이 부모 클래스의 메서드와 완전히 같아야 한다.
- 접근 제어자는 부모 클래스의 메서드보다 더 좁은범위로 변경할 수 없다. 즉, protected 메서드를 private으로 변경할 수 없다.
- 부모 클래스의 메서드보다 더 큰 범위의 예외를 선언할 수 없다.
예제
class Person{
//Field
int gender;
int power;
//Constructor
Person(){
this.gender = 1; // 1:남성, 2:여성
this.power = 100; // 기본파워
}
//Method
void walk() {
System.out.println("걷기");
}
}
class Hero extends Person{
//Field
String name;
int age;
//Constructor
Hero(){}
Hero(String name, int age){
super();
this.name = name;
this.age = age;
}
//Method
void walk() {
System.out.println("뛰기");
}
void displayPerson() {
System.out.println("이름:" + name + ", 나이:" + age + ", 성별:" + gender + ", 파워:" + power);
}
}
public class oop_InheritanceSample2 {
public static void main(String[] args) {
// [1] : 부모클래스 객체생성
Person person1 = new Person();
System.out.println("--- 부모클래스 객체 ---");
person1.walk();
System.out.println();
// [2] : 부모클래스를 상속한 자식클래스 객체 생성
Hero hero1 = new Hero("슈퍼맨", 25);
System.out.println("--- 자식클래스 객체 ---");
hero1.displayPerson();
hero1.walk();
System.out.println();
// [3] : 부모클래스를 상속한 자식클래스 객체생성
Hero hero2 = new Hero("슈퍼걸", 20);
System.out.println(" --- 자식클래스 객체 2 ---");
hero2.gender = 2;
hero2.power = 50;
hero2.displayPerson();
hero2.walk();
}
}
--- 부모클래스 객체 ---
걷기
--- 자식클래스 객체 ---
이름:슈퍼맨, 나이:25, 성별:1, 파워:100
뛰기
--- 자식클래스 객체 2 ---
이름:슈퍼걸, 나이:20, 성별:2, 파워:50
뛰기
1. 먼저, Person class가 정의되어 있고, 이 클래스에는 "gender, power" 필드와 "walk()" 메서드가 있다.
2. Hero class는 Person class를 상속받고 있다.(extends Person), 이로써 Hero class는 Person class의 모든 public 및 protected 멤버를 상속받는다.
3. Hero class에서는 Person class의 walk() 메서드를 오버라이딩하고 있다. 즉, Person class에서는 walk()메서드가 "걷기"를 출력하지만, Hero class에서는 "뛰기"를 출력한다.
4. main Method에서 Person class의 인스턴스(person1)와 Hero class의 인스턴스(hero1, hero2)를 생성하고 있다. hero1, hero2는 wlak() 메서드를 호출할 때, 오버라이딩된 Hero class의 walk() 메서드를 사용한다.
'Java > JAVA 100 문제 풀이' 카테고리의 다른 글
자바 part.3 문제풀이 - 상속과 캡슐화 (0) | 2023.07.25 |
---|---|
자바 part.3 문제풀이 - Getter와 Setter를 이용한 클래스 캡슐화 (0) | 2023.07.25 |
자바 part.3 문제풀이 - 상속 : Person과 Hero예제를 통한 이해 (0) | 2023.07.25 |
자바 part.3 문제풀이 - 상속(Inheritance)의 이해와 활용 (0) | 2023.07.24 |
자바 part.3 문제풀이 - 생성자 활용, 객체 생성과 초기화 (0) | 2023.07.24 |