업캐스팅 문제 풀면 업캐스팅이 상속과 문제풀 때 어떻게 해석해야할지 모르겠습니다.
영상에 있는 업케스팅 에시들 다 따라해보고 이해도 했습니다.
볼때마다 안하고 상속하는 거와 별차이 없는 거 아닌가 이런 생각만 듭니다.
상속을 해도 부모 생성자부터 호출하고
상속을 해도 자식 메서드를 우선 적용하고
업캐스팅 표시가 있어서 생성자를 부모먼저 자식먼저 하는 건 업캐스팅이 있으나 없으나 마찬가지 아닌가
이런 생각만 듭니다.
답변 2
0
안녕하세요,
좋은 질문이십니다. 업캐스팅의 진짜 의미는 "참조 타입이 무엇인가"입니다.
아래와 같은 경우만 살피시면 됩니다. 생성자와는 무관하지만 메서드 상속에는 관련이 있습니다.
class Animal {
void sound() {
System.out.println("...");
}
}
class Dog extends Animal {
void sound() {
System.out.println("멍멍");
}
void fetch() { // Dog만 가진 메서드
System.out.println("공 가져옴");
}
}
public class Main {
public static void main(String[] args) {
// 일반 상속 사용
Dog dog = new Dog();
dog.sound(); // ✅ 멍멍
dog.fetch(); // ✅ 공 가져옴
// 업캐스팅
Animal animal = new Dog();
animal.sound(); // ✅ 멍멍 (오버라이딩 적용)
animal.fetch(); // ❌ 컴파일 에러! Animal에 fetch() 없음
}
}
업캐스팅은 제한을 거는 대신, 다양한 자식을 하나의 타입으로 다룰 수 있는 유연함을 얻는 것입니다.
그래서 생성자 자체는 상속과 거의 비슷하지만, 어떤 자식을 상속해서 갈아끼울 것인가를 선택할 수 있습니다.
class Cat extends Animal {
void sound() { System.out.println("야옹"); }
void purr() { System.out.println("그르릉"); }
}
public class Main {
public static void main(String[] args) {
// Animal 타입 배열 하나로 전부 관리
Animal[] animals = { new Dog(), new Cat(), new Dog() };
for (Animal a : animals) {
a.sound(); // 각자 오버라이딩된 메서드 실행
// a.fetch() 나 a.purr() 는 못 씀 → Animal만 보장되는 것만 호출
}
}
}
애초에 이런 개념인데 시험을 준비하려다보니 다양한 예시로 강의를 구성한 것입니다.
0
안녕하세요, 인프런 AI 인턴입니다. Remi Yun님.
업캐스팅에 대해 궁금하신 점에 대한 답변을 드리겠습니다. 질문해주신 내용은 업캐스팅을 이해하는 데 있어 가장 중요한 부분인 ‘상속과의 차이점’에 대한 것입니다.
업캐스팅의 이해
업캐스팅의 기본 개념:
- 업캐스팅이란 자식 객체를 부모 클래스 타입의 참조 변수로 참조할 수 있게 하는 것입니다. 즉, 자식 객체지만 부모 클래스의 형태로 다룰 수 있게 되는 것입니다.
- 업캐스팅이란 자식 객체를 부모 클래스 타입의 참조 변수로 참조할 수 있게 하는 것입니다. 즉, 자식 객체지만 부모 클래스의 형태로 다룰 수 있게 되는 것입니다.
상속과의 차이점:
- 상속은 자식 클래스가 부모 클래스의 속성과 메서드를 그대로 사용할 수 있게 해 줍니다.
- 반면, 업캐스팅을 하면 부모 클래스의 참조를 사용하기 때문에 부모 클래스에 존재하는 메서드 및 속성만 직접적으로 사용할 수 있습니다. 자식 클래스에서 새로 정의한 메서드는 접근할 수 없지만, 자식 클래스에서 오버라이딩한 메서드는 호출됐을 때 자식 클래스의 메서드가 동작합니다. 이것이 다형성의 핵심이며, 다양한 객체를 동일한 방식으로 처리할 수 있게 해주는 장점이 있습니다.
- 상속은 자식 클래스가 부모 클래스의 속성과 메서드를 그대로 사용할 수 있게 해 줍니다.
신경 써야 할 사항
생성자의 호출 순서: 자식 클래스의 생성자를 호출할 때, 항상 부모 클래스의 생성자가 먼저 호출됩니다. 이는 객체 생성 시 상속 계층에 있는 모든 부모 클래스의 초기화가 완료되어야 하기 때문입니다.
오버라이딩된 메서드 호출: 업캐스팅을 통해 참조된 객체에서 메서드를 호출할 때, 자식 클래스에서 오버라이딩된 메서드가 우선적으로 호출됩니다. 이는 자바의 다형성 구현 방식이며, 객체의 실제 타입에 따라 수행 동작이 달라질 수 있음을 의미합니다.
관련 추가 설명 및 예시
업캐스팅과 다형성을 사용하면, 코드가 보다 유연하고 확장 가능하게 설계됩니다. 예를 들어, 다양한 유사 종류의 객체를 동일한 부모 타입의 인터페이스로 처리할 수 있다는 점이 큰 장점입니다.
관련 질문 및 답변
추가적으로 아래의 게시물도 참고하시면 업캐스팅에 대한 이해를 넓히는 데 도움이 될 것입니다:
Remi Yun님의 질문에 대한 설명이 충분히 되었기를 바랍니다. 😊
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
자식 코드 내 super() 생략
0
12
2
출력질문
0
17
2
31강 4:06
0
18
2
파이썬 학습자료가 강의 자료와 다릅니다.
0
30
3
섹션 2 - 9강 강의자료 다운로드 문제
0
22
3
29강 3:09
0
19
2
28강 6:42
0
23
2
22강 17:33
0
26
2
75강 26년 1회 코드 문제 해석 강의 질문 드립니다.
0
27
2
모의고사
0
30
1
17강 28:26
0
26
2
C언어 기출문제 변형에서 6번 문제입니다. 20:56
0
26
3
17강 22:38
0
25
2
16강 2:17
0
44
2
부모 및 자식 생성자 출력 관련
0
43
2
부모 및 자식 생성자 출력
0
38
2
9강 35분경 질문있습니다
0
40
2
11강 3:20
0
47
2
10강 11:42
0
46
2
9강 26:23
0
52
2
9강 23:46
0
39
2
코드 중간에 . 붙은건 뭐라고 봐야할까요?
0
58
2
설명중 단어 의미 해석 문제.
0
40
1
수강 섹션마다 옆에 자료 다운로드 버튼이 있는데. 다운받으면 무슨내용이 있는건가요?
0
36
1





