728x90
반응형
  • 상속의 의미

하나의 class가 있고 다른 하나의 class를 만들려고 할때, 즉, 이미 만들어져있는 class에 무엇인가를 추가를 하고 싶을때, 이전 class를 훼손하지않고 앞에 class를 부모로 두고 상속하여 사용할 수 있다.

 

  • 대상 : 클래스
  • 목적 : 클래스의 재사용
  • 상속 클래스의 역할
  • 부모 클래스 : 상속을 하는 클래스 (base class, parent class, 상위 클래스)
  • 자식클래스 : 상속을 받는 클래스 (child class, derived class, 파생 클래스)

상속

  • 상속 관계 표시 및 형식

Parent class ← Child class

class A
{
    ....
}

class B : A  //A:부모클래스(상위클래스) B:자식클래스(하위클래스or파생클래스) 
{
    ....
}

 

상속 접근제한

  • 상위 클래스 접근제한

B에서 접근할 수 있는 것? → protected, public

Main과 같은 외부에서 접근? → public

class A
{
    private
    protected
    public
}

class B : A
{
}

 

예제

using System;
using System.IO;
using System.Collections;

namespace ex
{
    class A
    {
        private void PrintPrivate()
        {
            Console.WriteLine("private");
        }
        protected void PrintProtected()
        {
            Console.WriteLine("protected");
        }
        public void PrintPublic()
        {
            Console.WriteLine("public");
        }
    }
    class B : A
    {
        public void Print()
        {
            //PrintPrivate // 보호수준때문에 엑세스할 수 없다. => 그래서 error 발생
            PrintProtected();
            PrintPublic();
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            B Test = new B(); // 생성
            Test.Print(); // PrintProtected, PrintPublic 출력
            Test.PrintPublic();
        }
    }
}

 

상속 관계에서 생성자, 소멸자 호출

  • 생성자 호출 (상위 → 하위)
  • 소멸자 호출 (하위 → 상위)

 

예제

using System;
using System.IO;
using System.Collections;

namespace ex
{
    class A
    {
        public A()
        {
            Console.WriteLine("A 생성자");
        }

        ~A()
        {
            Console.WriteLine("A 소멸자");
        }

    }
    class B : A
    {
        public B()
        {
            Console.WriteLine("B 생성자");
        }
        ~B()
        {
            Console.WriteLine("B 소멸자");
        }
        
    }
    public class Program
    {
        static void Main(string[] args)
        {
            B Test = new B(); // B 클래스 생성
        }
    }
}
// 소멸자는 consol 창에서 안보임

// 결과
// A 생성자
// B 생성자
// A 소멸자
// B 소멸자

 

상속과 관련된 base 키워드

  • 역할

상위 클래스의 생성자 또는 멤버 변수 및 메서드 호출

 

  • 활용

멤버이름의 중복

하위에서 상위 설정 등 (생성자 위주)

 

예제

using System;
using System.IO;
using System.Collections;

namespace ex
{
    class A
    {
        int number;
        protected string name = "Hello";
        public A(int num)
        {
            number = num;
        }
        public void PrintA()
        {
            Console.WriteLine(number);
        }
    }
    class B : A
    {
        string name = "World";
        public B(int num):base(num)
        { 
        }
        public void PrintB()
        {
            Console.WriteLine("{0} {1}", base.name, name);
        }

    }
    public class Program
    {
        static void Main(string[] args)
        {
            B Test = new B(3); // B 클래스 생성
            Test.PrintA();
            Test.PrintB();
        }
    }
}

상속과 관련된 sealed

  • Selaed 란?

봉인은 한

  • 사용의미는?

상속 불가에 대한 명시 (멤버변수, 메서드)

 

Type (1)

sealed class A
{
    ....
}

class B : A
{
    ....
}

Type (2)

class A
{
    sealed public void Print()
}

class B : A
{
    ....
}
728x90
반응형

+ Recent posts