회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인PC가 아닐 경우 타인이 로그인할 수 있습니다.
PC를 여러사람이 사용하는 공공장소에서는 체크하지 마세요.
소셜네트워크 서비스를 통해서 로그인하시면 별도의 로그인 절차없이 회원서비스를 이용하실 수 있습니다.


최근 게시물

1.노션에서 작성 중

1.노션에서 작성 중

개편하기 전까지 노션에서 작성 중

2024.04.04//read more

2.ChatGPT

2.ChatGPT

OpenAI로 대규모 언어 모델대화형...

2023.03.16//read more

3.노코딩 게임 엔진 - 빌..

3.노코딩 게임 엔진 - 빌..

빌드 지원안드로이드iOS윈도우즈특이사...

2023.03.14//read more

4.(완료) 미접속 회원 정..

4.(완료) 미접속 회원 정..

[완료] 36명의 회원을 정리하였습니...

2023.02.16//read more

5.매뉴얼 플러스 - 전자제..



안정적인 DNS 서비스 DNSEver
DNS Powered by DNSEver.com


클래스 상속

푸딩뱃살 | 2014.11.17 23:35 | 조회 3809
클래스 상속

클래스에서 가지고 있는 맴버(메소드, 변수 등)을 다른 클래스에서 이어 받는 것, 즉 상속을 받는 클래스에서 상속해주는 클래스의 맴버를 사용할 수 있다.
상속 시킬 클래스를 기본 클래스 또는 부모 클래스, 상속 받을 클래스를 파생 클래스 또는 자식 클래스라 한다.
파생 클래스에서 상속 맴버를 정의하지 않아도 사용할 수 있고, 파생 클래스 안에서도 독자적으로 맴버를 정의할 수가 있다. 

파생 클래스에서 기본 클래스의 맴버를 private 수식자를 사용하여 제한 할 수가 있다. 그러므로 다른 객체에서 액세스할 수가 없다.
아무것도 정의하지 않으면 private로 간주한다.
private 이외에도 public이나 protected 등의 수식자가 있다.

클래스에서 다른 클래스의 맴버를 받는 것이 클래스의 상속이라 한다.

기본(부모) 클래스와 파생(자식) 클래스
파생된 클래스는 무한으로 만들 수 있지만 기본 클래스는 하나뿐이다.


상속의 정의
//기본 클래스
class Animal {
    public string name_;  //변수 정의
    public int age_;      //변수 정의
    
    public void print() {
        ......
    }
}

//파생 클래스
class Dog : Animal {
    public int birth_;  //변수 정의 외 Animal 클래스의 변수들 사용 가능
}

//객체 생성
class AnimalPrint {
    public static void Main() {
        Dog dog_ = new Dog();  //객체 생성하여 사용
    }
}
//예
using System;

//기본 클래스
class Book
{
    public string title_;
    public string genre_;

    public void printBook()
    {
        Console.WriteLine("제    목: " + title_);
        Console.WriteLine("분    야: " + genre_);
    }
}

//파생 클래스
class Novel : Book
{
    public string writer_;
    public void printNov()
    {
        printBook();
        Console.WriteLine("저    자: " + writer_);
    }
}

//파생 클래스
class Magazine : Book
{
    public int day_;
    public void printMag()
    {
        printBook();
        Console.WriteLine("발 매 일: " + day_ + "일");
    }
}

//객체 생성
class Bookshelf
{
    public static void Main()
    {
        Novel nov_ = new Novel();
        nov_.title_ = "시오리의 비경 발견";
        nov_.genre_ = "판타지";
        nov_.writer_ = "앤크";

        Magazine msg_ = new Magazine();
        msg_.title_ = "월간 C# 그림책";
        msg_.genre_ = "컴퓨터";
        msg_.day_ = 20;

        nov_.printNov();
        Console.WriteLine();
        msg_.printMag();
    }
}
#결과
제 목: 시오리의 비경 발견
분 야: 판타지
저 자: 앤크

제 목: 월간 C# 그림책
분 야: 컴퓨터
발 매 일: 20일


상속의 종류
기본 클래스의 맴버에 액세스 하는 방법의 종류들가 있다.

public 수식자 멤버
파생 클래스에서도 기본 클래스의 멤버를 자유롭게 사용할 수 있다.
//예
class A {
    public int a_ = 5;
}

class B:A {
    public void Calc() {
        int x_ = 5 + a_;
    }
}
private 수식자 멤버
기본 클래스의 멤버를 파생 클래스에서 사용할 수 없게 된다.
//예
class A {
    private int a_ = 5;
}

class B:A {
    public void Calc() {
        int x_ = 5 + a_;
    }
}
#결과
변수 a가 액세스할 수 없으므로 오류
보호 수준 때문에 'A.a'에 액세스할 수 없습니다.


protected 수식자 멤버
기본 클래스의 protected가 붙은 멤버는 기본 클래스 안과 이를 파생 클래스에서만 액세스할 수 있다.
다른 클래스에서 protected 멤버에 액세스할 수 없다.


다양한 수식자

sealed
sealed(실드)는 파생 클래스, 추상 클래스에서 상속되지 않도록 한다.
sealed class A {
    ......
}

class B : A {  //오류가 남
    ......
}


static
static(스태틱)은 필드나 메소드에 붙이는 수식자이다. 같은 클래스로부터 생성한 객체에서 static을 붙인 필드는 값이 같아진다.(공유한다)
어느 객체에도 같은 동작을 하는 메소드에는 static을 붙여 두는 것이 좋다.
class A {
    public static int a_;
}

class B : A {
    A a1_ = new A();
    A a2_ = new A();
    
    A.a_ = 50;   //A.a_ 변수 정의
}
#결과
a1의 a변수와 a2의 a변수는 같은 값인 50이 된다.


참고 서적> c#이 보이는 그림책
285개(11/15페이지)
프로그래밍
번호 제목 글쓴이 조회 날짜
85 [C#] 생성자와 상속 base 푸딩뱃살 3728 2014.11.21 02:09
>> [C#] 클래스 상속 푸딩뱃살 3810 2014.11.17 23:35
83 [C#] 클래스 예제 푸딩뱃살 3283 2014.11.03 23:03
82 [C#] Main() 메소드 푸딩뱃살 3198 2014.11.02 23:43
81 [C#] 인덱서 푸딩뱃살 2698 2014.11.01 01:09
80 [C#] 속성 푸딩뱃살 2737 2014.11.01 00:41
79 [C#] 생성자 푸딩뱃살 2848 2014.10.27 01:48
78 [C#] public, private 사진 첨부파일 푸딩뱃살 3076 2014.10.25 22:32
77 [C#] 오버로드(overload) 푸딩뱃살 2667 2014.10.22 23:02
76 [Python] 웹 파싱, 웹 클라이언트 프로그래밍 httplib 푸딩뱃살 3464 2014.10.06 00:46
75 [C#] 스코프(scope) 푸딩뱃살 3277 2014.10.02 01:17
74 [C#] 메소드 호출 푸딩뱃살 2717 2014.10.02 00:46
73 [C#] 메소드(method) 푸딩뱃살 3254 2014.10.02 00:30
72 [C#] 필드(field) 푸딩뱃살 3133 2014.10.02 00:06
71 [C#] 객체(object)의 생성 푸딩뱃살 3607 2014.10.01 23:36
70 [C#] 클래스(class)의 개념 푸딩뱃살 3513 2014.10.01 22:29
69 [기본] 용어 - 클래스, 객체, 인스턴스, 메소드, 필드 푸딩뱃살 3949 2014.05.29 11:36
68 [Python] Python 프로세스 리스트 추출 푸딩뱃살 8615 2014.05.20 16:02
67 [Python] Python 환경 변수 설정 첨부파일 푸딩뱃살 4223 2014.05.20 12:46
66 [Python] Python console 컬러 출력 첨부파일 푸딩뱃살 5192 2014.05.14 22:23