다형성
- 똑같은 호출문이라도 변수가 실행 중에 가리키는 타입에 따라 실제 동작이 달라질수 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | using System; namespace StarUnit { class Unit { public virtual void Move() { Console.WriteLine( "이동" ); } public virtual void Attack() { Console.WriteLine( "공격" ); } public virtual void Die() { Console.WriteLine( "죽음" ); } } class Marine : Unit { public override void Move() { Console.WriteLine( "아장아장" ); } public override void Attack() { Console.WriteLine( "두두두" ); } public override void Die() { Console.WriteLine( "으아악" ); } } class Tank : Unit { public override void Move() { Console.WriteLine( "끼릭끼릭" ); } public override void Attack() { Console.WriteLine( "빠방" ); } public override void Die() { Console.WriteLine( "펑" ); } } class Zealot : Unit { public override void Move() { Console.WriteLine( "뒤뚱뒤뚱" ); } public override void Attack() { Console.WriteLine( "퍽퍽퍽" ); } public override void Die() { Console.WriteLine( "슈우우" ); } } class Program { static void Main(string[] args) { Unit[] arUnit = { new Marine(), new Tank(), new Zealot() }; for ( int i = 0; i < arUnit.Length; i++) { arUnit[i].Move(); arUnit[i].Attack(); arUnit[i].Die(); } } } } |
- 유닛에 따라 이동, 공격, 죽는 방법이 모두 다르므로 메소드를 가상으로 선언, 파생클래스들은 자신에게 맞게 재정의
- 모든 유닛들은 Unit에서 파생, 배열로 선언하면 집합을 관리할수 있다
- 똑같은 호출문으로도 서로 다른 겨롸가 나올수 있는것, 이것이 바로 다형성의 정의이다
- 미래에 추가되는 클래스에 대해서도 잘 동작한다
- 새 히드라 클래스를 추가하도 잘 동작한다
'Study > C#' 카테고리의 다른 글
C# 클래스 상속 - 3. 봉인 클래스 (0) | 2012.01.03 |
---|---|
C# 클래스 상속 - 3. 추상 클래스 (0) | 2012.01.03 |
C# 클래스 상속 - 2. 재정의 (메소드 재정의) (0) | 2011.12.29 |
C# 클래스 상속 - 2. 재정의 (멤버 숨기기) (0) | 2011.12.29 |
C# 클래스 상속 - 1. 안전한 형변환 (0) | 2011.12.29 |