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
반응형
'C# > C#으로 살아남기_나우캠퍼스_이태성강사' 카테고리의 다른 글
[C# 언어 12강] 추상클래스 (0) | 2022.01.03 |
---|---|
[C# 언어 12강] Override와 Overload (0) | 2022.01.03 |
[C# 언어 11강] 이벤트(Event) (0) | 2021.12.30 |
[C# 언어 11강] 델리게이트(Delegate) (0) | 2021.12.30 |
[C# 언어 10강] 배열/속성/인덱서 비교 (0) | 2021.12.30 |