살구월드

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

목차

  1. 오버라이딩(Overriding)이란?
  2. 오버라이딩 조건
  3. 간단한 메소드 오버라이딩 예제
  4. 부모 클래스와 자식 클래스의 관계(상속)
  5. 추상 클래스 오버라이딩 예제(Abstract)
  6. 인터페이스 오버라이딩 예제(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();
    }
}

 

오버라이딩이 가능한 이유는 부모 클래스를 자식 클래스가 extend(상속) 받았기 때문이다.

 

 

 

 

 

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();  // "멍멍"
    }
}

 

인터페이스 상속시는 extend가 아닌 implements 키워드를 사용한다.

잠깐, 리눅스, C 언어, Java, Python 등
각종 예제 검색하기

공유하기

facebook twitter kakaoTalk kakaostory naver band