메소드 오버라이딩

·2025년 4월 14일

Power Java

목록 보기
27/75

6.4 메소드 오버라이딩

메소드 오버라이딩
: 자식 클래스가 부모 클래스의 메소드를 자신의 필요에 따라 재정의하는 것이다.
1) 메소드의 이름
2) 매개 변수
3) 반환형
이 동일하여야 한다.

-부모 클래스의 메소드와 자식 클래스의 메소드가 완벽하게 일치하지 않으면
메소드 오버라이딩으로 취급되지 않는다.
=> 이를 방지하기 위해서 메소드 이름 앞에는 @Override 어노테이션을 붙이는 것이 좋다.

< 키워드 super를 사용하여 부모 클래스 멤버 접근 >
-super는 상속 관계에서 부모 클래스의 메소드나 필드를 명시적으로 참조하기 위하여 사용된다.

*부모 클래스가 자동 호출되는 생성자와는 달리,
메소드는 부모 클래스의 것을 호출하려면 super.메소드명()을 작성하여 명시적으로 나타내주어야 한다.

< 오버라이딩 vs 오버로딩 >
•오버로딩 overloading
: 같은 메소드명을 가진 여러 개의 메소드를 작성하는 것.

class Shape {
	public void draw() { ... }
    public void draw(int x, int y) { ... }
    
};

-컴파일 시간에서의 다형성을 지원한다.

•오버라이딩 overriding
: 부모 클래스의 메소드를 자식 클래스가 다시 정의하는 것.

class Circle extends Shape {
	public void draw() {
    	"재정의"
    }
};

-실행 시간에서의 다형성을 지원할 수 있다.
=> 동적 바인딩

< 정적 메소드를 오버라이드하면 어떻게 될까? >

•인스턴스 메소드
-오버라이드 가능

•정적 메소드
-오버라이드 불가능
-숨김 hiding 이라고 표현

class Animal {
	**public static void A()** {
    	System.out.println("static method in Animal");
    }
}
public class Dog extends Animal {
	**public static void A()** {
    	System.out.println("static method in Dog");
    }
    public static void main(String[] args) {
    	Dog dog = new dog;
        a.A();
        dog.A();
    }
}
// 실행 결과
static method in Animal
static method in Dog

=> 정적 메소드는 참조 변수의 타입에 따라 호출되는 메서드가 결정된다.
*인스턴스 메소드는 실제 객체의 타입에 따라 호출되는 메서드가 결정되며,
(1) 자식 클래스가 오버라이딩한 경우 무조건 자식 클래스의 메서드를 호출하고,
(2) 자식 클래스가 오버라이딩하지 않은 경우 부모 클래스의 메서드를 호출한다.

0개의 댓글