• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

다형성 함수 질문 있습니다.

24.04.08 10:48 작성 조회수 41

0

안녕하세요.

SuperKnight 객체에 Player를 상속받고 있는 Knight객체를 상속 받았는데, override를 통해 SuperKnight 객체에도 Move함수를 구현했습니다.

class SuperKnight : Knight // 이중 상속

{

public override void Move()

{

base.Move();

Console.WriteLine("SuperKnight 이동!");

}

}

 

그후 main에서

SuperKnight superKnight = new SuperKnight();

superKnight.Move();

Move 함수 호출 시 최상위 부모(Player), 부모(Knight), 자식(SuperKnight)의 Move함수가 순차적으로 콜 되던군요.(아래처럼)

Player 이동!

Knight 이동!

SuperKnight 이동!

이게 맞는 거죠?

 

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.08

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

네, 최창우님의 이해하신 내용이 정확합니다. 객체 지향 프로그래밍의 다형성 개념에 따라, 서브클래스는 슈퍼클래스의 메서드를 오버라이드(재정의)할 수 있으며, base 키워드를 사용해 직접적인 부모 클래스의 메서드를 호출할 수 있습니다. 따라서, SuperKnight 클래스에서 Move() 함수를 호출할 때 부모(Knight)와 최상위 부모(Player)의 Move() 메서드가 순차적으로 호출되는 것은 예상되는 동작입니다.

다형성과 관련하여 유사한 질문이 있었습니다: 다형성 부분에 질문있습니다.
- 이 질문에서는 SuperKnight 클래스에서 base.Move();를 사용하여 KnightMove 메서드를 실행하는 법에 관해 논의되었습니다. 다만, 질문의 핵심은 Player 클래스의 Move() 메서드를 직접 호출하는 방법에 대한 것이었습니다. 그러나 C#에서는 직접적인 부모 클래스 이상의 메서드 호출을 지원하지 않기 때문에, 이에 대해 직접적인 해결책을 찾기 어려웠습니다.

귀하의 질문에 대한 답변은, 객체의 메서드 호출 과정에서 PlayerKnightSuperKnight 순으로 Move() 메서드가 호출되는 것이 정상적인 다형성을 활용한 프로그래밍의 예입니다. 이는 메서드 오버라이딩이 잘 적용되었음을 보여줍니다.

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