inflearn logo
강의

Khóa học

Chia sẻ kiến thức

(Mới nhất 2026!) Vượt qua kỳ thi thực hành Kỹ sư xử lý thông tin chỉ trong một tuần

Upcasting (Kiểu cha, hàm khởi tạo con)

업캐스팅 문제 풀면 업캐스팅이 상속과 문제풀 때 어떻게 해석해야할지 모르겠습니다.

Đã giải quyết

54

Remi Yun

1 câu hỏi đã được viết

0

영상에 있는 업케스팅 에시들 다 따라해보고 이해도 했습니다.

 

볼때마다 안하고 상속하는 거와 별차이 없는 거 아닌가 이런 생각만 듭니다.

상속을 해도 부모 생성자부터 호출하고

상속을 해도 자식 메서드를 우선 적용하고

 

업캐스팅 표시가 있어서 생성자를 부모먼저 자식먼저 하는 건 업캐스팅이 있으나 없으나 마찬가지 아닌가

이런 생각만 듭니다.

 

python java c 정보처리기사 정보처리산업기사

Câu trả lời 2

0

weekendcode

안녕하세요,

좋은 질문이십니다. 업캐스팅의 진짜 의미는 "참조 타입이 무엇인가"입니다.

 

아래와 같은 경우만 살피시면 됩니다. 생성자와는 무관하지만 메서드 상속에는 관련이 있습니다.

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

communityai8509

안녕하세요, 인프런 AI 인턴입니다. Remi Yun님.

업캐스팅에 대해 궁금하신 점에 대한 답변을 드리겠습니다. 질문해주신 내용은 업캐스팅을 이해하는 데 있어 가장 중요한 부분인 ‘상속과의 차이점’에 대한 것입니다.

업캐스팅의 이해

  1. 업캐스팅의 기본 개념:

    • 업캐스팅이란 자식 객체를 부모 클래스 타입의 참조 변수로 참조할 수 있게 하는 것입니다. 즉, 자식 객체지만 부모 클래스의 형태로 다룰 수 있게 되는 것입니다.
  2. 상속과의 차이점:

    • 상속은 자식 클래스가 부모 클래스의 속성과 메서드를 그대로 사용할 수 있게 해 줍니다.
    • 반면, 업캐스팅을 하면 부모 클래스의 참조를 사용하기 때문에 부모 클래스에 존재하는 메서드 및 속성만 직접적으로 사용할 수 있습니다. 자식 클래스에서 새로 정의한 메서드는 접근할 수 없지만, 자식 클래스에서 오버라이딩한 메서드는 호출됐을 때 자식 클래스의 메서드가 동작합니다. 이것이 다형성의 핵심이며, 다양한 객체를 동일한 방식으로 처리할 수 있게 해주는 장점이 있습니다.

신경 써야 할 사항

  • 생성자의 호출 순서: 자식 클래스의 생성자를 호출할 때, 항상 부모 클래스의 생성자가 먼저 호출됩니다. 이는 객체 생성 시 상속 계층에 있는 모든 부모 클래스의 초기화가 완료되어야 하기 때문입니다.

  • 오버라이딩된 메서드 호출: 업캐스팅을 통해 참조된 객체에서 메서드를 호출할 때, 자식 클래스에서 오버라이딩된 메서드가 우선적으로 호출됩니다. 이는 자바의 다형성 구현 방식이며, 객체의 실제 타입에 따라 수행 동작이 달라질 수 있음을 의미합니다.

관련 추가 설명 및 예시

업캐스팅과 다형성을 사용하면, 코드가 보다 유연하고 확장 가능하게 설계됩니다. 예를 들어, 다양한 유사 종류의 객체를 동일한 부모 타입의 인터페이스로 처리할 수 있다는 점이 큰 장점입니다.

관련 질문 및 답변

추가적으로 아래의 게시물도 참고하시면 업캐스팅에 대한 이해를 넓히는 데 도움이 될 것입니다:

Remi Yun님의 질문에 대한 설명이 충분히 되었기를 바랍니다. 😊

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

26년 1회 실기 해설 강의

0

33

2

53번 4-1 자료 오류 있는 것 같습니다.

0

63

2

7번문제

0

49

2

C언어 변형문제 9번문제 Pdf 수정요청

0

39

2

메서드 오버드라드

0

41

2

실수

0

41

1

공부 우선순위 우선강의 알려주세요

0

75

1

생성자 호출순서 강의 10번 문제 30분대 질문입니다

0

41

2

25년 2회 기출 5:40 질문입니다.

0

33

2

모의고사1회 3번 파이썬문제

0

65

2

C언어 출제변형 6번 문제

0

43

2

c언어 출제변형 강의 질문

0

24

2

28:40

0

28

2

C :  언어 배열과  문자열 수업자료

0

23

2

파이썬 리스트, 딕셔너리 질문

0

36

2

모의고사 관련 질문 건

1

62

3

자료 내용 오류

0

57

2

정적 변수, 정적 메서드(static) v2

0

43

2

v1.2 와 v0.91 PDF

0

95

1

업캐스팅 (부모형태, 자식생성자)

0

45

2

정보처리산업기사 준비중입니다.

0

68

2

실기 D -6

0

100

2

(기출) 2024년 2회 기출문제 - 이론 포함 22분32초 질문입니다

0

51

3

강의파일 통합본

0

75

2