C#

[C#] - 오버라이딩 : overriding, 오버로딩 : overloading

Riucc 2019. 4. 10. 14:35

○ 오버라이딩 : overriding, 오버로딩 : overloading 

 

- 오버라이딩(overriding)

     자식클래스에서 부모클래스의 메소드를 재정의하여 사용

     부모클래스의 메소드 앞엔 virtual 예약어를

     자식클래스의 메소드 앞엔 override 예약어를 붙인다

     자식클래스에서 부모클래스를 명시적으로 가르키는 base 예약어도 있다


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
    class Class1
    {
        static void Main(string[] args)
        { 
            Mammal m1 = new Mammal();
            m1.Move();
            Lion l1 = new Lion();
            l1.Move();
            Whale w1 = new Whale();
            w1.Move();
        }
    }
 
   // ㅡㅡ this는 클래스 인스턴스 자체를 가르키고 base는 부모 클래스를 가르킴  ㅡㅡ 
    class Mammal
    {
        // 자식클래스에서 재정의 할 메소드 앞에 virtual 붙인다(부모쪽)
        virtual public void Move() { Console.WriteLine("이동한다"); }
    }
 
    class Lion : Mammal {
        override public void Move()
        {
            // base는 부모클래스를 가르킴
            base.Move();
        }
    }
    class Whale : Mammal {
        // 오버라이딩 할 자식 클래스 앞에 override 를 붙인다(자식쪽)
        override public void Move()
        {
            Console.WriteLine("물속에서 다닌다");
        }
    }
cs



- 오버로딩(overloading)

     이름은 같고, 반환값, 매개변수의 수, 개별 매개변수의 타입이 다르게 재정의하는 것

     매개변수의 다형성


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
    class Class1
    {
        static void Main(string[] args)
        { 
            Math math = new Math();
            Console.WriteLine(math.Abs(3));
            Console.WriteLine(math.Abs(5.744));
            Console.WriteLine(math.Abs(91.0222222m));
        }
    }
 
    class Math
    {
        public int Abs(int value)
        {
            return (value >= 0) ? value : -value;
        }
        public double Abs(double value)
        {
            return (value >= 0) ? value : -value;
        }
        public decimal Abs(decimal value)
        {
            return (value >= 0) ? value : -value;
        }
    }
cs