본문 바로가기
프로그래밍

2_9. virtual / override / new

by BlueOcean&Shark 2019. 1. 22.
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

댓글