회원 로그인
정보기억 정보기억에 체크할 경우 다음접속시 아이디와 패스워드를 입력하지 않으셔도 됩니다.
그러나, 개인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 | 조회 3819
클래스 상속

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

파생 클래스에서 기본 클래스의 맴버를 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 푸딩뱃살 3739 2014.11.21 02:09
>> [C#] 클래스 상속 푸딩뱃살 3820 2014.11.17 23:35
83 [C#] 클래스 예제 푸딩뱃살 3294 2014.11.03 23:03
82 [C#] Main() 메소드 푸딩뱃살 3208 2014.11.02 23:43
81 [C#] 인덱서 푸딩뱃살 2706 2014.11.01 01:09
80 [C#] 속성 푸딩뱃살 2743 2014.11.01 00:41
79 [C#] 생성자 푸딩뱃살 2857 2014.10.27 01:48
78 [C#] public, private 사진 첨부파일 푸딩뱃살 3084 2014.10.25 22:32
77 [C#] 오버로드(overload) 푸딩뱃살 2676 2014.10.22 23:02
76 [Python] 웹 파싱, 웹 클라이언트 프로그래밍 httplib 푸딩뱃살 3479 2014.10.06 00:46
75 [C#] 스코프(scope) 푸딩뱃살 3281 2014.10.02 01:17
74 [C#] 메소드 호출 푸딩뱃살 2727 2014.10.02 00:46
73 [C#] 메소드(method) 푸딩뱃살 3258 2014.10.02 00:30
72 [C#] 필드(field) 푸딩뱃살 3141 2014.10.02 00:06
71 [C#] 객체(object)의 생성 푸딩뱃살 3615 2014.10.01 23:36
70 [C#] 클래스(class)의 개념 푸딩뱃살 3522 2014.10.01 22:29
69 [기본] 용어 - 클래스, 객체, 인스턴스, 메소드, 필드 푸딩뱃살 3956 2014.05.29 11:36
68 [Python] Python 프로세스 리스트 추출 푸딩뱃살 8617 2014.05.20 16:02
67 [Python] Python 환경 변수 설정 첨부파일 푸딩뱃살 4228 2014.05.20 12:46
66 [Python] Python console 컬러 출력 첨부파일 푸딩뱃살 5202 2014.05.14 22:23