C# 클래스 상속, 가상 메서드, as/is 연산자


1. 부모 클래스의 생성자가 있으면 자식클래스를 객체화 할때 부모클래스의 생성자가 호출됨.
2. 가상메소드(virtual Method)를 만들어서 자식클래스에서 재정의(override) 가능.
3. 자식클래스에서 부모클래스에 접근이 가능한 것은 public, protected이고 private은 접근 불가능하다.
4. 부모 클래스의 변수에 자식클래스를 대입할 수 있다.
5. is 연산자 - bool형을 리턴하고 부모클래스의 대입된 자식클래스를 확인함. 밑의 예시
6. as 연산자 - 부모클래스와 자식클래스를 치환함. 밑에 예시

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 부모 클래스
 
public class Animal
{
    public int petId;
    public string name;
    public string color;
    public string gender;
 
    public Animal(int petId, string name, string color, string gender)
    {
        this.petId = petId;
        this.name, = name;
        this.color = color;
        this.gender = gender;
    }
 
    public virtual string Sound()
    {
        return "";
    }
}
 
// 자식 클래스
public class Cat : Animal // (부모클래스)Animal클래스를 상속 받음
{
    public Cat(int petId, string name, string color, string gender)
        : base(petId,name,color,gender) // 부모클래스의 어떤 생성자인지 지정을 해야됨.( 부모클래스의 생성자는 여러개 있을수 있음)
    {
    }
 
    public override string Sound() // 부모클래스의 가상메소드를 오버라이드함.
    {
        return "야옹";
    }
 
    public string Scratch()
    {
        return "할퀴기";
    }
}
 
// 자식 클래스
public enum DogBreed { Mixed, Jindo}
public class Dog : Animal // (부모클래스)Animal클래스를 상속 받음
{
    public DogBreed breed;
 
    public Dog(int petId, string name, string color, string gender, DogBreed breed)
        : base(petId,name,color,gender) // 부모클래스의 어떤 생성자인지 지정을 해야됨.( 부모클래스의 생성자는 여러개 있을수 있음)
    {
        this.breed = breed; // breed 추가
    }
 
    public override string Sound() // 부모클래스의 가상메소드를 오버라이드함.
    {
        return "멍멍";
    }
 
    public string Bite()
    {
        return "물기";
    }
}
cs

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
Cat cat1 = new Cat(1"야옹이""White""Male");
Cat cat2 = new Cat(2"나비""Black""Female");
Dog dog = new Dog(3"누렁이""Yellow""Male");
 
// 4. 부모 클래스의 변수에 자식클래스를 대입할 수 있다.
Animal animal;
animal = cat1;
animal.Sound(); // "야옹"
 
animal = dog;
animal.Sound(); //"멍멍"
 
public class Test
{
    public void Show()
    {
        // 위의 객체화를 MyPets의 리스트로 담았다고 가정함.
        foreach(Animal animal in MyPets)  // 상속을 사용하여 중복을 최소화함. 상속을 사용하지 않았다면 2개의 
        {
            console.writeline(animal.name);
            console.writeline(animal.Sound());
            if(animal is Cat) // 5. is 연산자 - bool형을 리턴하고 부모클래스의 대입된 자식클래스를 확인함.
                console.writeline((animal as Cat).Scratch()); // as 연산자 - 부모클래스와 자식클래스를 치환함. 밑에 예시
            if(animal is Dog)
                console.writeline((animal as Dog).Bite());
        }    
    }
}
 
// 결과값 .... 돌려보진 않음..
야옹이
야옹
할퀴기
나비
야옹
할퀴기
누렁이
멍멍
물기
cs



참고 강좌 : https://www.youtube.com/watch?time_continue=1024&v=gE1AEHPtMxE

댓글