본문 바로가기

JAVA

[Java] 오버라이딩(overriding)이란?

오버라이딩(overriding)

객체 지향 프로그래밍(OOP)에서 자식 클래스가 부모 클래스의 메서드를 재정의하는 것을 의미한다.

 

 


 

오버라이딩 방법

오버라이딩할 메서드의 이름과 매개변수 동일해야 한다.

 

  • 부모 클래스의 기능을 바꾸거나 더 확장할 수 있다.
  • 다형성(polymorphism)을 구현할 때 자주 사용된다.

 

 


 

사용 예제

클래스 다이어 그램

 

 

더보기

Main

package practice;

public class Main {
    public static void main(String[] args) {
        System.out.println("--강아지--");
        Dog dog = new Dog();
        dog.move();
        dog.speak();

        System.out.println("--고양이--");
        Cat cat = new Cat();
        cat.move();
        cat.speak();
    }
}

 

Cat Class

package practice;

public class Cat extends Animal {
    public void speak() {
        System.out.println("냐옹");
    }
}

 

Dog Class

package practice;

public class Dog extends Animal {
    public void speak() {
        System.out.println("멍멍");
    }
}

 

Animal Class

package practice;

public class Animal {
    public void move() {
        System.out.println("이동 합니다.");
    }

    public void speak() {
        System.out.println("말 합니다.");
    }
}

Cat, Dog Class는 Animal Class를 통해 move(), speak() 메서드를 상속받는다.

move 메서드는 그대로 사용하고 speak 메서드를 오버라이드하여 각 Class에 맞게 변경해주었다.

 

 

콘솔값

 


 

 

주의 할점

더보기

Main

package practice;

public class Main {
    public static void main(String[] args) {
        System.out.println("--강아지--");
        Dog dog = new Dog();
        dog.move();
        dog.speak();

        System.out.println("--고양이--");
        Cat cat = new Cat();
        cat.move();
        cat.speak();
    }
}

 

Cat Class

package practice;

public class Cat extends Animal {}

 

Dog Class

package practice;

public class Dog extends Animal {
    public void speak() {
        System.out.println("멍멍");
    }
}​

 

Animal

package practice;

public class Animal {
    public void move() {
        System.out.println("이동 합니다.");
    }

    public void speak() {
        System.out.println("말 합니다.");
    }
}

Cat, Dog Class는 Animal Class를 통해 move(), speak() 메서드를 상속았지만, 개발자가 깜빡하고 상속받은 메서드를 오버라이딩 하지 않았을 때, 다음과 같은 의도하지 않은 값이 나올 수 있다.

 

콘솔값

이를 예방하기 위해서는 추상 클래스라는 개념을 알아야 한다.

 

 


 

다음으로

💡위에서 정리했듯이, 일반 클래스를 상속받아 부모 메서드를 오버라이딩해서 사용해야 하는 경우, 깜빡하고 오버라이딩을 통해 구현하지 않았을 때, 개발자가 의도하지 않은 값이 나올 수 있다. 이를 예방하기 위해 추상 클래스를 사용하면 된다.

 

 

 

 

 

https://kimyongjun0129.tistory.com/105

 

[Java] 추상 클래스(abstract class)란?

추상 클래스(Abstract class)공통적인 속성과 기능을 정의하지만, 완전한 구현을 하지 않고, 자식 클래스가 반드시 구현해야 할 부분만 선언해놓는 클래스이다.쉽게 말해서 자식 클래스에게 틀을 제

kimyongjun0129.tistory.com

 

'JAVA' 카테고리의 다른 글

[Java] 람다(Lamda)  (0) 2025.04.17
[Java] 추상 클래스(abstract class)란?  (0) 2025.04.16
[Java] Wrapper Class란?  (0) 2025.04.16
[Java] 상속(Inheritance)이란?  (0) 2025.04.15
[Java] Queue 자료구조와 Queue 인터페이스란?  (0) 2025.04.15