메서드 오버라이드
2025년 2회 코드문제 -1
11:40
이해 안되는게 있는데
자식에서 재정의 하면 자식에서 실행되어야 하는거 아닌가요? 순수 부모여서그런건가요?
또한 만약 Parent ref= new 자식이였다면
4P가 되는건가요? 스테틱이면 부모꺼 출력으로 알고 있어서 혹시 제가 잘못 알고 있는부분있으면 추가적으로 알려주세요 ㅜ
답변 2
0
안녕하세요,
네 순수 부모인 경우 부모 필드만 보셔야 합니다.
자식 것으로 되어있으면 인스턴스 메서드 같은 경우 자식 메서드를 실행해야 합니다.
부모에서 static인 경우에는 상속되지 않기 때문에 앞에 타입이 Parent이면 하이딩 처리가 되어 부모 것을 실행하셔야 합니다.
public class Main {
public static void main(String[] args) {
Parent ref = new Child();
System.out.println(ref.x(2) + ref.id());
}
}
class Parent {
public int x(int i) {
return i + 3;
}
public static String id() {
return "P";
}
}
class Child extends Parent {
public int x(int i) {
return i + 2;
}
public static String id() {
return "C";
}
}
출력문: 4P
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 클래스의 것이 호출됩니다.
자바의 이 특성은 객체 지향 프로그래밍에서 다형성을 구현하는 데 중요한 요소입니다. 필요에 따라 인스턴스 변수와 정적 변수/메서드의 동작 차이를 염두에 두시길 바랍니다.
관련 토론이나 추가 설명이 필요하다면, 다음 링크들을 참고해 보시면 도움이 될 것입니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
필기자료 사라졌나요?(실기 일주일만에 안돼서 재도전-_-)
0
51
2
26년 1회 실기 해설 강의
0
68
2
53번 4-1 자료 오류 있는 것 같습니다.
0
73
2
7번문제
0
60
2
C언어 변형문제 9번문제 Pdf 수정요청
0
48
2
메서드 오버드라드
0
51
2
실수
0
46
1
공부 우선순위 우선강의 알려주세요
0
90
1
생성자 호출순서 강의 10번 문제 30분대 질문입니다
0
49
2
25년 2회 기출 5:40 질문입니다.
0
43
2
모의고사1회 3번 파이썬문제
0
75
2
C언어 출제변형 6번 문제
0
50
2
c언어 출제변형 강의 질문
0
32
2
28:40
0
34
2
C : 언어 배열과 문자열 수업자료
0
31
2
파이썬 리스트, 딕셔너리 질문
0
43
2
모의고사 관련 질문 건
1
69
3
자료 내용 오류
0
64
2
정적 변수, 정적 메서드(static) v2
0
51
2
v1.2 와 v0.91 PDF
0
104
1
업캐스팅 (부모형태, 자식생성자)
0
51
2
정보처리산업기사 준비중입니다.
0
74
2
실기 D -6
0
105
2
(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다
0
60
3





