메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

뇌를 자극하는 C# 프로그래밍

뇌를 자극하는 C# 프로그래밍 질의응답 게시판입니다.

[C# 5.0]생성자와 기반 클래스-파생클래스 사이의 형식 변환 에 대한 질문입니다

2015-09-13

|

by tyui159

2953

1.생성자가 하는 역할이 인스턴스에 클래스의 내용을 메모리에다가 적재하는건가요?
  생성자의 존재 의의와 기능에 대해 궁금합니다.

2.Mammal mammal; 와
  Mammal mammal = new Mammal(); 의 차이가 무엇인지 메모리에서 어떤일이 일어나는지가 궁금합니다.

이런 질문을 하는 이유는 234p~236p의 기반클래스와 파생 클래스 사이의 형식변환 부분에서
Mammal mammal = new Mammal();
mammal = new Dog(); <---덮어쓰기 되는거 맞죠?
이 부분이 이해되지 않아서 입니다.

3.이게 상속-파생 클래스관계라서 "개는 포유류이다" 라는 식으로 가능하다는건 이해 했습니다만.
  Mammal 타입의 mammal 인스턴스에 Dog생성자를 실행하면 정확히 어떤일이 벌어진건지 모르겠습니다.
  밑에 질문을 보니->"객체 mammal를 만드는데 Dog클래스 형틀에서 찍어내라. 이 객체는 Dog 타입인 동시에 Mammal 타입이다." 이라고 하셨는데
Dog타입인 동시에 Mammal타입 이라면 어째서
mammal.Bark(); 식의 실행은 불가능한건가요?

4.Mammal타입에서 Dog클래스 안의 Bark엔 접근이 불가능한데
  241p오버라이딩 예제에서는

class ArmorSuite
{
      public virtual void Initialize()
      {
             Console.WriteLine("Armored");
      }
}
class IronMan : ArmorSuite
{
      public override void initialize()
      {
            base.Initialize();
            Console.WriteLine("Repulsor Rays Armed");
      }
}

-----Main---
ArmorSuite ironman = new IronMan();
ironman = new IronMan();
ironman.initialize();
----결과-----------
Armored
Repulsor Rays Armed
-------------------
Armorsuite타입에서 Ironman타입의 오버라이딩된 Initialize로는 어떻게 접근이 되는건지요.

5.Mammal mammal = new Dog();을 실행했을때 메모리에서 Mammal타입 인스턴스 mammal에 Dog 클래스의 내용이
  적재되는것인지가 궁금합니다.
  생성자가 정확히 어떤과정을 거쳐 실행되는지를 모르니 다른타입의 생성자를 실행한다는 개념이 와닿지가 않는것
  같네요
class Mammal
{
public void Nurse() {...}
}

class Dog : Mammal
{
public void Bark() {...}
}
이렇게 파생 클래스 선언해놓고

Mammal mammal = new Mammal();
mammal.Nurse();

mammal = new Dog();           //여기서 mammal엔 Dog의 내용이 메모리에 적재되는건가요?
mammal.Nurse();
//그렇다면 여기다 mammal.Bark를 쓸수 없는 이유는 무엇인가요

Dog dog = (Dog)mammal;     //이렇게 형변환을 해주어야만
dog.Nurse();
dog.Bark();                        //이놈을 쓸수 있는 이유가 뭘까요?
댓글 입력