C#

C#문법-15 : 클래스 상속

알통몬_ 2019. 4. 25. 11:30
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 

지난 포스팅에서는 접근 제한자에 대해 공부했습니다.

2019/04/25 - [C#] - C#문법-14 : 접근 제한자 public, interal, protected, private

이번 포스팅에서는 클래스 상속에 대해 공부합니다.


상속이란 A라는 클래스로부터 B라는 클래스를 만든다?

라고 이해하시면 쉽습니다.

자바에서는 흔히 부모 자식 관계라고도 합니다.

예제)

using System;

namespace workspace_csharp {

public class GrandParent {
// _userName, _userId 라는 필드를 가지고
// userName, userId 라는 속성을 가지며
// Call_GrandParent_Value() 라는 메소드도 가집니다.
// 여기서 메소드에 보면 virtual 이라는 키워드가 보이는데요.
// GrandParent 클래스를 상속 받은 클래스에서 Call_..._Value()를
//오버라이딩할 수 있도록 해주기 위한 키워드입니다.
public string _userName;
public long _userId;

public string userName {
get => _userName;
set => _userName = value;
}
public long userId {
get => _userId;
set => _userId = value;
}

public virtual void Call_GrandParent_Value() {
System.Console.WriteLine("userName = " + userName);
System.Console.WriteLine("userId = " + userId);
}
}

public class Parent : GrandParent {
// GrandParent 클래스를 상속받습니다.
// 상속은 '클래스이름 : 상속받을 클래스이름'을 써주면 됩니다.
// _userAge 라는 필드를 가지고,
// userAge 라는 속성을 가지며,
// GrandParent 클래스에 있는 Call_GrandParent_Value() 메소드를
// 오버라이딩합니다. 오버라이딩하려면 override 라는 키워드를 추가하면 됩니다.
public int _userAge;
public int userAge {
get => _userAge;
set => _userAge = value;
}


public override void Call_GrandParent_Value() {
System.Console.WriteLine("userName = " + userName);
System.Console.WriteLine("userId = " + userId);
System.Console.WriteLine("userAge = " + userAge);
}
}

public class Child : Parent {
// Parent 클래스를 상속받습니다.
// Parent를 상속받았기 때문에 GrandParent의 값들까지 사용할 수 있습니다.
// 때문에 userId, userAge 라는 필드가 없지만,
// 부모클래스와 조부모클래스에 존재하기 때문에 사용가능하고,
// 아래처럼 userName을 새롭게 값을 지정하고 싶을 때
// 앞에 new 키워드를 붙여서 재지정 하면 됩니다.
new public string userName ="Child2";

override public void Call_GrandParent_Value() {
System.Console.WriteLine("userName = " + userName);
System.Console.WriteLine("userId = " + userId);
}

public void Call_Parent_Value() {
System.Console.WriteLine("userAge = " + userAge);
}
}

}

상속의 경우는 많이 사용해보시면 쉽게 이해가 되실 거에요.

제가 자바를 알기에 자바를 안다고 가정하고 포스팅을 해서

설명이 더 자세하지 못한 점 죄송합니다.

위에서 virtual, override 키워드는 위 예제 처럼 접근 제한자 앞이나

뒤에 선언해주면 됩니다.


클래스들을 선언하고 상속까지 받아봤으니 사용되 해봐야겠죠?

using System;
using System.Text;
using System.Windows;


namespace workspace_csharp {

public class Program {


public static void Main(String[] args) {

GrandParent grandParent = new GrandParent();
grandParent._userName = "GrandParent";
grandParent._userId = 20190425001;
grandParent.Call_GrandParent_Value();
System.Console.WriteLine("=---------=");

Parent parent = new Parent();
parent._userAge = 28;
parent._userName = "Parent";
parent._userId = 20190425002;
parent.Call_GrandParent_Value();

System.Console.WriteLine("=---------=");

Child child = new Child();
child._userName = "Child";
child._userId = 20190425003;
child.Call_GrandParent_Value();
child.Call_Parent_Value();
}
}
}

이런 식으로 사용하시면 됩니다.

이상입니다. 감사합니다.

다음 포스팅에서는 속성에 대해 자세히 알아보고

static 키워드에 대해 알아보겠습니다.

반응형