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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace cshapExTwo12 { class Program { static void Main(string[] args) { /* * 오버라이드 : 메소드 재정의(상속관계에서 같은 이름의 메소드를 재정의) * * virtual : 부모클래스의 메소드 앞에 붙는 키워드 * - 자식클래스에 의해서 재정의될 수 있다는 의미를 갖는다 * (재정의 될 수도 있고 안될 수 도 있다) * * override : 자식클래스의 메소드 앞에 붙는 키워드 * - 부모로부터 받은 메소드를 재정의 한다라는 의미 * - 재정의 할때는 보모의 메소드 이름과 같아야함, 프로토타입도 같아야함 * * cf) virtual키워드와 override키워드를 사용하지 않고 오버라이드하면 * 오버라이드가아니고 부모의 메소드를 무시하는것이며 이것은 오버라이드라 할 수 없음 * * new : 오버라이딩과는 다른 개념으로 메소드를 숨기는 기능 * * */ DerivedClass dc = new DerivedClass(); dc.echo1(); dc.echo2(); dc.echo3(); BaseClass bc = new DerivedClass(); bc.echo1(); bc.echo2(); bc.echo3(); } } class BaseClass { public virtual void echo1() { Console.WriteLine("부모클래스1"); } public virtual void echo2() { Console.WriteLine("부모클래스2"); } public virtual void echo3() { Console.WriteLine("부모클래스3"); } } class DerivedClass : BaseClass { /* public override void echo1() { Console.WriteLine("자식클래스1"); } */ public override void echo2() // override을 이용해 재정의함을 알려줌 { Console.WriteLine("자식클래스2"); } public new void echo3() // override을 이용해 재정의함을 알려줌 { Console.WriteLine("자식클래스3"); } } } | cs |
---------------------------------------------결과창-----------------------------------------
부모클래스1
자식클래스2
자식클래스3
부모클래스1
자식클래스2
부모클래스3
'프로그래밍' 카테고리의 다른 글
2_11. Tuple(튜플) (0) | 2019.01.22 |
---|---|
2_10. struct (구조체) (0) | 2019.01.22 |
2_8. is연산자 와 as 연산자 (0) | 2019.01.21 |
2_7.상속관계에서 클래스간의 형변환 (0) | 2019.01.21 |
2_6.상속(base키워드, sealed키워드) (0) | 2019.01.20 |
댓글