목차
- 오버라이딩(Overriding)이란?
- 오버라이딩 조건
- 간단한 메소드 오버라이딩 예제
- 부모 클래스와 자식 클래스의 관계(상속)
- 추상 클래스 오버라이딩 예제(Abstract)
- 인터페이스 오버라이딩 예제(Interface)
1. 오버라이딩(Overriding)이란?
오버라이딩(Overriding)은 자식 클래스가 부모 클래스로부터 상속받은 메서드를 자신의 필요에 맞게 재정의하는 것을 말합니다. 오버라이딩은 객체 지향 프로그래밍의 다형성 개념 중 하나로, 같은 이름의 메서드를 다양한 클래스에서 다르게 구현할 수 있도록 합니다.
2. 오버라이딩 조건
오버라이딩을 하기 위해서는 다음 조건을 만족해야 합니다.
- 메서드 이름이 부모 클래스와 동일해야 함
- 매개변수의 개수와 타입이 부모 클래스의 메서드와 동일해야 함
- 접근 제어자는 부모 클래스의 메서드와 같거나 더 넓은 범위로 설정 필요
- 부모 클래스의 메서드가 final이 아닐 것
3. 간단한 메소드 오버라이딩 예제
아래는 부모 클래스에서 상속받은 메서드를 자식 클래스에서 오버라이딩하는 간단한 예제입니다.
class Parent {
void printMessage() {
System.out.println("부모 클래스의 메시지");
}
}
class Child extends Parent {
@Override
void printMessage() {
System.out.println("자식 클래스의 메시지");
}
}
public class Main {
public static void main(String[] args) {
Parent parent = new Parent();
Parent child = new Child();
parent.printMessage(); // "부모 클래스의 메시지"
child.printMessage(); // "자식 클래스의 메시지"
}
}
4. 부모 클래스와 자식 클래스의 관계(상속)
오버라이딩은 상속 관계에서 자식 클래스가 부모 클래스의 메서드를 재정의하는 개념입니다. 부모 클래스에서 선언된 메서드를 자식 클래스가 동일한 이름으로 다시 정의하면, 자식 클래스의 객체가 해당 메서드를 호출할 때 오버라이딩된 메서드가 실행됩니다.
class Parent {
void printToday() {
System.out.println("2023-01-01 00:00:00");
}
}
class Child extends Parent {
@Override
void printToday() {
System.out.println("2023-12-31 07:00:00");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
child.printToday();
}
}
5. 추상 클래스 오버라이딩 예제(Abstract)
추상 클래스 역시 메서드 오버라이딩을 통해 자식 클래스에서 메서드를 재정의할 수 있습니다. 추상 클래스의 추상 메서드를 자식 클래스에서 오버라이딩하여 구현해야 합니다.
abstract class Shape {
abstract void draw();
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("원을 그립니다.");
}
}
public class Main {
public static void main(String[] args) {
Shape shape = new Circle();
shape.draw(); // "원을 그립니다."
}
}
6. 인터페이스 오버라이딩 예제(Interface)
인터페이스는 다른 클래스에서 구현해야 하는 메서드 목록을 정의할 수 있습니다. 인터페이스의 메서드를 클래스에서 구현할 때에도 오버라이딩을 사용합니다. 다만 인터페이스를 상속할 때는 extend가 아닌 implements를 사용합니다.
interface Animal {
void makeSound();
}
class Dog implements Animal {
@Override
public void makeSound() {
System.out.println("멍멍");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
dog.makeSound(); // "멍멍"
}
}
반응형