✍ 샘플 코드
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
c.Cry();
c.Groom();
Animal a = c; //암시적 형 변환
a.Cry();
//a.Groom(); 컴파일 에러
}
}
class Cat : Animal
{
public void Groom()
{
Console.WriteLine("Grooming...");
}
}
class Animal
{
public void Cry()
{
Console.WriteLine("Cry~");
}
}
✅ 결과
Cry~
Grooming...
Cry~
- 자식 인스턴스를 부모 타입으로 암시적으로 형 변환할 수 있다.
- 부모 타입의 자식 인스턴스는 부모의 기능만 쓸 수 있다.
2. 명시적 형 변환
class Program
{
static void Main(string[] args)
{
Animal a = new Animal();
Cat c = (Cat)a; //명시적 형 변환
}
}
'Pjt.Animal' 형식 개체를 'Pjt.Cat' 형식으로 캐스팅할 수 없습니다.
- 부모 인스턴스를 자식 타입으로 명시적으로 형 변환은 가능하다. (컴파일은 가능하다.)
- 그러나, 실행 시 오류가 발생하는데, 부모 인스턴스는 자식의 기능에 대한 정보가 없기 때문이다.
class Program
{
static void Main(string[] args)
{
Cat c = new Cat();
Animal a = c; // 암시적 형 변환 후,
Cat cc = (Cat)a;// 명시적 형 변환
cc.Cry();
cc.Groom();
}
}
Cry~
Grooming...
자식 인스턴스를 부모 타입으로 형 변환했다가 다시 자식 타입으로 형 변환하면, 해당 인스턴스는 부모의 기능과 자식의 기능을 쓸 수 있다.