인프런 커뮤니티 질문&답변
메서드 오버라이드
작성
·
15
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. jongbin7245님.
자바에서 메서드 오버라이딩(Overriding)과 관련하여 혼란스러울 수 있는 부분에 대한 설명을 드리겠습니다.
메서드 오버라이딩
- 오버라이딩은 자식 클래스에서 부모 클래스의 메서드를 재정의하는 것입니다. 이때, 실제 객체의 타입에 따라 오버라이딩된 메서드가 실행됩니다.
- 즉,
Parent ref = new 자식();구조일 경우,ref가 자식 객체를 참조하고 있으므로, 자식 클래스의 오버라이딩된 메서드가 실행됩니다.
정적 메서드 및 변수
- 정적(static) 메서드와 정적 변수는 클래스 소속이므로, 오버라이딩이라는 개념이 적용되지 않습니다. 따라서 참조 타입의 클래스에 정의된 메서드나 변수가 호출됩니다.
- 만약
Parent ref = new 자식();인 상황에서 정적 메서드나 변수를 호출하면, 부모 클래스의 것이 호출됩니다.
관련 예시
class Parent {
static int x = 2;
int y = 3;
static void printStatic() {
System.out.println("Parent static method");
}
void print() {
System.out.println("Parent instance method");
}
}
class Child extends Parent {
static int x = 4;
int y = 5;
static void printStatic() {
System.out.println("Child static method");
}
@Override
void print() {
System.out.println("Child instance method");
}
}
public class Test {
public static void main(String[] args) {
Parent ref = new Child();
// 정적 변수와 메서드
System.out.println(ref.x); // 2 출력
ref.printStatic(); // "Parent static method" 출력
// 인스턴스 메서드
ref.print(); // "Child instance method" 출력
}
}
여기서 보듯이, ref.print();는 “Child instance method”를 출력하지만, 정적 변수나 메서드는 Parent 클래스의 것이 호출됩니다.
자바의 이 특성은 객체 지향 프로그래밍에서 다형성을 구현하는 데 중요한 요소입니다. 필요에 따라 인스턴스 변수와 정적 변수/메서드의 동작 차이를 염두에 두시길 바랍니다.
관련 토론이나 추가 설명이 필요하다면, 다음 링크들을 참고해 보시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





