* 상속
: 클래스(기본 클래스)가 가지고 있는 멤버를 다른 클래스(파생 클래스)에 이어받는 것.
상속한 멤버는 파생 클래스에서 정의하지 않아도 사용할 수 있다.
파생 클래스는 가지를 치듯 계속 만들 수 있지만 상속받을 수 있는 클래스는 하나뿐이다. (상속을 주는 건 자유)
class Animal { public string name; public int age; public void print() { ... .. Dog dog = new Dog(); class Dog : Animal { public int birth; } |
Dog : 파생 클래스 명
: Animal : 기본 클래스 명
상속을 정의할 땐 : 을 사용한다.
: 그러나 상속을 이용한다고 기본 클래스의 모든 것을 이어받을 순 없다.
각 멤버에 붙이는 수식자에 의해 상속이나 액세스 가능 여부를 결정할 수 있다.
(4-3) 참고
액세스 수식자 | 의미 |
public | 해당 수식된 멤버는 파생 클래스에서 자체 클래스의 멤버와 같이 사용할 수 있다. |
private | private이 붙거나, 아무 수식도 없다면 파생 클래스는 사용할 수 없다. |
protected | 해당 멤버가 들어있는 클래스 및 파생 클래스에서만 액세스할 수 있다. |
- 상속되지 않도록 할 수식자
Sealed class A { ... .. class B : A { ... |
B는 A를 상속받을 수 없다. 에러!
봉★인
- 필드다 메소드에 붙이는 수식자
class A { public static int a; } ... .. A a1 = new A(); A a2 = new A(); A.a = 50 .. |
같은 클래스로부터 생성한 객체에서 static을 붙인 필드는 값을 공유한다.
a1의 a도 50, a2의 a도 50이 된다.
어느 객체든, 같은 동작을 하는 메소드엔 붙이는 게 좋다.
static 멤버는 비非 static멤버에 덮어쓸 수 없다.
static 멤버에 같은 객체 내의 멤버를 이용하려면 static을 붙여야 한다.
static을 붙인 멤버는 객체를 생성하지 않아도 사용할 수 있다. 이때, 참조하려면 객체명이 아니라 클래스명( B.get(); )을 써야한다.
- 상속에서의 생성자
: 기본 클래스와 파생 클래스 각각에 생성자가 있는 경우, 기본 클래스부터 차례로 생성자가 작동한다.
상속한 생성자에 인수가 있는 경우, base를 이용해 상속 원본에 인수를 전달한다.
-Calc1이라는 클래스가 가장 먼저 있다. 여기에 정수형 x와, 정수형 a와 b를 가진 클래스 Calc1의 생성자가 있다. 생성자는 Calc1클래스의 변수x에 자신이 가진 a와 b를 더한 값을 대입했다.
-클래스Calc2는 Calc1을 상속받고, Calc2가 가진 인수, c와 d에 상속 원본이 가진 a와 b를 호출한다.
-클래스Calc3는 Main()을 가졌으며, 클래스Calc2로부터 인수 1, 2를 가진 객체calc2를 생성한다. 그리고 콘솔창에 calc2에서 가져온x를 출력한다.
=인수 1과 2는 각각 Calc2의 c와 d에 전달됐으며, 이들이 다시 Calc1의 a와 b에 전달됐기 때문에 x의 값은 둘을 더한 3이 된다.
- 이름의 은폐
: 같은 이름을 가진 멤버를 만들어 기본 클래스의 멤버 이름를 은폐시키는 것.
파생 클래스의 멤버에 기본 클래스의 멤버와 같은 이름을 붙이고자 할 경우 앞에 new를 붙이면 되는데, 이때 new가 붙은 멤버를 호출하면 항상 파생 클래스 쪽의 멤버가 호출된다.
클래스B를 만들어 A를 상속했지만 new를 통해 변수 a의 값을 100으로 만들었다. 때문에 출력도 3이 아닌 100이 된다.
이름이 은폐된 기본 클래스의 멤버를 파생에서 사용하려면 base를 이용한다.
'메타버스기반게임콘텐츠기획 > 스터디(C#이 보이는 그림책)' 카테고리의 다른 글
5장, 클래스의 속성 (문제) (0) | 2021.11.29 |
---|---|
5장, 클래스의 상속 (5-2) 오버라이드 / 구조체 (0) | 2021.11.29 |
* 4장, 클래스 (문제) (0) | 2021.11.28 |
* 4장, 클래스 (4-4) 생성자 / 속성 / 인덱서 / Main() (0) | 2021.11.28 |
4장, 클래스 (4-3) 오버로드 / 선택적 인수 / 액세스 수식자 (0) | 2021.11.26 |