티스토리 뷰

Java

[Java] 오버라이딩(Overriding)

nohriter 2022. 8. 24. 15:24

자바의 오버라이딩에 대해 알아보겠습니다.

 

 

 

 

오버라이딩(Overriding)


오버라이딩이란?

오버라이딩(overriding)이란 상속 관계에 있는 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 같은 시그니쳐를 갖는 메소드로 다시 정의하는 것이라고 할 수 있다.

 

자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받는다. 이렇게 상속받은 메소드는 그대로 사용해도 되고, 필요한 동작을 위해 재정의하여 사용할 수도 있다. 즉, 메소드 오버라이딩이란 상속받은 부모 클래스의 메서드를 재정의하여 사용하는 것을 의미한다.

 

 

오버라이딩의 조건

1. 오버라이딩이란 메서드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 한다. 하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있다.

2. 부모 클래스의 메서드보다 접근 제어자를 더 좁은 범위로 변경할 수 없다.

3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없다.

 

 

메서드 오버라이딩

자바에서는 메서드 오버라이딩을 통해 상속받은 부모 클래스의 메서드를 자식 클래스에서 직접 재정의할 수 있다.

 

💡 @Override 어노테이션

주로 오버라이딩 할 때는 컴파일러에서 컴파일 타임에 체크할 수 있도록 하기 위해 
@Override  어노테이션을 붙여주는 것이 좋다. 오타를 쳐서 실수를 하는 경우를 방지해준다.

 

class Parent {

    void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }

}

class Child extends Parent {
	
    void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }

}

 

public class Inheritance05 {

    public static void main(String[] args) {

        Parent parent = new Parent();

        pa.display(); // "부모 클래스의 display() 메소드입니다."

        Child child = new Child();

        ch.display(); // "자식 클래스의 display() 메소드입니다."

        Parent pc = new Child();

        pc.display(); // "자식 클래스의 display() 메소드입니다."

    }

}

 

 

 

오버로딩과 오버라이딩

오버로딩과 오버라이딩은 그 단어의 유사함으로 인해 혼동하기 쉽다. 하지만 이름만 비슷할 뿐 그 개념은 확실히 다르며, 그 차이점을 아는 것이 중요하다.

 

⭐️ 오버로딩(overloading)
새로운 메서드를 정의하는 것

⭐️ 오버라이딩(overriding)
상속받은 기존의 메서드를 재정의하는 것

 

class Parent {

    void display() { System.out.println("부모 클래스의 display() 메소드입니다."); }

}

class Child extends Parent {

    // 오버라이딩된 display() 메소드

    void display() { System.out.println("자식 클래스의 display() 메소드입니다."); }

    void display(String str) { System.out.println(str); } // 오버로딩된 display() 메소드

}

 

public class Inheritance06 {

    public static void main(String[] args) {

        Child ch = new Child();

        ch.display(); // "자식 클래스의 display() 메소드입니다."

        ch.display("오버로딩된 display() 메소드입니다."); // "오버로딩된 display() 메소드입니다."

    }

}

 

 

 

 

참고

http://www.tcpschool.com/java/java_inheritance_overriding

'Java' 카테고리의 다른 글

[Java] static 키워드  (1) 2022.09.01
[Java] 7.패키지  (1) 2022.08.31
[Java] 자바는 왜 다중상속을 지원하지 않을까?  (0) 2022.08.24
[Java] 6.상속  (0) 2022.08.24
[Java] 3. 연산자  (0) 2022.08.06
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함