반응형
공감 및 댓글은 포스팅 하는데 아주아주 큰 힘이 됩니다!! 포스팅 내용이 찾아주신 분들께 도움이 되길 바라며 더 깔끔하고 좋은 포스팅을 만들어 나가겠습니다^^
|
지난 포스팅에서는 접근 제한자에 대해 공부했습니다.
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 키워드에 대해 알아보겠습니다.
반응형
'C#' 카테고리의 다른 글
C#문법-17 : 제네릭 (0) | 2019.05.24 |
---|---|
C#문법-16 : 속성과 static 클래스, 메소드, 필드, 속성 (0) | 2019.04.25 |
C#문법-14 : 접근 제한자 public, interal, protected, private (1) | 2019.04.25 |
C#문법-13 : 전처리기와 Indexer 인덱서 (0) | 2019.04.24 |
C#문법-12 : 이벤트 event (0) | 2019.04.24 |