출저 및 참고 : http://blog.eairship.kr/142 (누구나가 다 이해할 수 있는 프로그래밍 첫걸음 블로그)
를 보면서 공부하고, 나중에 다시 보기 편하게 여기에 정리해 놓은 것입니다. 원본은 위 글입니다~!
상속
- 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 모든 멤버를 물려받게 됩니다.
- 다만, 생성자는 상속되지 않으며 객체 생성시 부모 클래스의 생성자가 자동으로 호출됩니다.
- private로 선언된 멤버는 상속이 불가능 합니다.
- 반대로, 소멸시에는 자식 클래스부터 소멸되고, 부모 소멸자가 소멸됩니다.
- 상속의 예제
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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication8 { class Parent { public int num; public Parent() { Console.WriteLine("부모 클래스의 생성자가 호출되었습니다"); } } class Child : Parent { public Child(int num) { this.num = num; Console.WriteLine("자식 클래스의 생성자가 호출되었습니다."); } public void DisplayValue() { Console.WriteLine("num의 값은 {0} 입니다.", num); } } class Program { static void Main(string[] args) { Child cd = new Child(20); cd.DisplayValue(); } } } | cs |
결과 : 부모 클래스의 생성자가 호출 되었습니다.
자식 클래스의 생성자가 호출 되었습니다.
num의 값은 20 입니다.
- this 키워드 : 부모 클래스의 멤버 변수에 접근
- base 키워드 : 자식 클래스에도 num이라는 멤버 변수가 존재할 때와 같을 때
1 2 3 4 5 6 7 8 | .. public Child(int num) { base.num = num; Console.WriteLine("자식 클래스의 생성자가 호출되었습니다."); } .. | cs |
sealed
- 상속 시킬 수 없게 만들 클래스의 이름 앞에다 sealed 키워들 사용하면 된다.
- sealed가 붙은 클래스는 다른 클래스의 부모가 될 수 없다.
- 컴파일 에러가 남. ( ~형식, ~에서 파생될 수 없습니다.)
프로퍼티 get, set은 많이 활용해서 잘 알고 있으니 패쓰해야지 'ㅡ')!
메소드 재정의(Virtual, Override)
- 부모 클래스의 메소드를 자식 클래스에서 다시 정의할 때
- virtual : 부모 클래스의 재정의 될 메소드에 사용
- override: 자식 클래스에서 virtual로 선언된 부모 클래스의 메소드를 재정의 하겠다는 표시.
- private로 지정된 메서드는 재정의 할 수 없습니다.
- 예제
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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication21 { class Parent { public virtual void A() { Console.WriteLine("부모 클래스의 A() 메서드 호출!"); } } class Child : Parent { public override void A() { Console.WriteLine("자식 클래스(Child)의 A() 메서드 호출!"); } } class Daughter : Parent { public override void A() { Console.WriteLine("자식 클래스(Daughter)의 A() 메서드 호출!"); } } class Program { static void Main(string[] args) { Parent parent = new Parent(); parent.A(); Child child = new Child(); child.A(); Daughter daughter = new Daughter(); daughter.A(); } } } | cs |
결과 : 부모 클래스의 A() 메서드 호출!
자식 클래스(Child)의 A() 메서드 호출!
자식 클래스(Daughter)의 A() 메서드 호출!
멤버 숨기기(new)
- new 지정자를 사용하면 부모 클래스이 멤버를 숨길 수 있습니다.
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 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication21 { class Parent { public int x = 100; public void A() { Console.WriteLine("부모 클래스의 A() 메서드 호출!"); } } class Child : Parent { public new int x = 200; public new void A() { Console.WriteLine("자식 클래스(Child)의 A() 메서드 호출!"); } } class Program { static void Main(string[] args) { Parent parent = new Parent(); parent.A(); Console.WriteLine("x : {0}", parent.x); Child child = new Child(); child.A(); Console.WriteLine("x : {0}", child.x); } } } | cs |
결과 : 부모 클래스의 A() 메서드 호출!
x : 100
자식 클래스(Child)의 A() 메서드 호출!
x : 200
'NOTE > Programming' 카테고리의 다른 글
[C#] 인터페이스 (0) | 2018.04.01 |
---|---|
[C#] 확장 메소드, 분할 클래스, 중첩 클래스 (0) | 2018.04.01 |
[C#] Delegate && Event (0) | 2018.04.01 |
[C#] Dictionary<Tkey, TValue> 클래스 (0) | 2018.04.01 |
[C++] 문자열을 입력받는 12가지 방법 (펌) (0) | 2018.04.01 |