[ C# ] 상속2
2023. 1. 13. 17:12ㆍC#
728x90
■ Override
- 상위 메서드를 무시하고 하위에서 재정의 하는 것
- 대상 : 클래스 메서드 > 속성 ,인덱서, 이벤트
- 상위 클래스에는 virtual 명시
- 하위 클래스에는 override 명시
using System;
namespace overrideA
{
class A
{
public virtual void Print()
{
Console.WriteLine("A Print");
}
}
class B : A
{
public override void Print()
{
Console.WriteLine("B Print");
}
}
class Program
{
static void Main(string[] args)
{
B Test = new B();
Test.Print();
A Test1 = Test;
Test1.Print();
}
}
}
■Overload
- 역할 : 하나의 메서드명에 다양한 매개변수 적용
- 장점 : 하나의 메서드로 다양한 값을 대입
- 형식 : 메서드명만 동일 , 매개변수는 임의로 적용
- 호출 : 메서드명과 매개변수로 호출
using System;
namespace overrideA
{
class A
{
public void Print() { Console.WriteLine("HI"); }
public void Print(int num)
{
Console.WriteLine(num);
}
public float Print(int num , float pi)
{
Console.WriteLine("{0} {1}", num, pi);
return pi;
}
}
class Program
{
static void Main(string[] args)
{
A Test = new A();
Test.Print();
Test.Print(100);
float pi = Test.Print(3, 3.14f);
Console.WriteLine(pi);
}
}
}
■추상 클래스
- abstract : 여러 가지 사물이나 개념에서 공통되는 특성이나 속성 따위를 추출하여 파악하는 작용
- 구현하려는 메서드의 형태만 존재하는 클래스
- 추상 클래스는 구현 형태만 제공 실제 구현은 하위에서 구현
- 제한 사항
- 추상 클래스는 상속으로만 사용
- new를 통해 생성할 수 없다.
- abstract가 있는 상위 메서드만 하위에서 모두 구현
- 용도 : 주어진 형태로 메서드를 구성해야 하는 경우
using System;
namespace overrideA
{
abstract class A
{
int number = 3;
public abstract void Print();
public void PrintNumber()
{
Console.WriteLine(number);
}
}
class B : A
{
public override void Print()
{
Console.WriteLine("abstract class");
}
}
class Program
{
static void Main(string[] args)
{
B Test = new B();
Test.Print();
Test.PrintNumber();
//A Test1 = new A();
//Test1.Print();
//Test1.PrintNumber();
//A class는 추상형식이므로 생성될 수 없다.
}
}
}
■ 다형성 ( polymorphism )
- 상속 관계에서 일어남
- 같은 종의 생물이면서도 어떤 형태나 형질이 다양하게 나타나는 현상
- 일반적 형태 : 상위에서 하위 호출
class A
{
public virtual void Print() { .... }
}
class B : A
{
public override void Print() { .... }
....
}
A Test = new B();
Test.Print();
using System;
namespace mopholo
{
class A
{
public virtual void Print() { Console.WriteLine("Hi Hwang Ui jung "); }
}
class B : A
{
public override void Print() { Console.WriteLine("Hi Vision inteligense"); }
}
class Program
{
static void Main(string[] args)
{
A Test1 = new B();
Test1.Print();
// =----- cast 형을 이용한 참조
B Test2 = new B();
A Test3 = new A();
Test3.Print();
Test2.Print();
}
}
}
■ 박싱과 언박싱 ( boxing & unboxing )
- 박싱
- 값 형식을 object 형 변환 (int , double , float )
- 언박싱
- object 형을 다시 값 형식으로 변환
- cast를 사용하여 형을 명시
- 클래스는 상속 관계에 있으므로 참조 변환이 된다. (Uncasting , Downcasting )
using System;
namespace mopholo
{
struct DATA
{
public string name;
public int number;
public DATA(string name, int number)
{
this.name = name;
this.number = number;
}
}
class Program
{
static void Main(string[] args)
{
int num = 3;
object obj = num;
int result = (int)obj;
Console.WriteLine("{0} {1} ", num, result);
//========================================
DATA Test = new DATA("Test", 3);
object obj1 = Test;
DATA Test1 = (DATA)obj1;
Console.WriteLine("{0} {1} ", Test1.name, Test1.number);
}
}
}
out : 3
out : Test 3
using System;
namespace mopholo
{
class A
{
public void PrintA() { Console.WriteLine("Hello"); }
}
class B : A
{
public void PrintB() { Console.WriteLine("Hwang Ui jung"); }
}
class Program
{
static void Main(string[] args)
{
B Test1 = new B();
object obj = Test1;
A Test2 = (A)obj;
Test1.PrintB();
Test2.PrintA();
}
}
}
728x90
'C#' 카테고리의 다른 글
[ C# ] Window Programing (0) | 2023.01.16 |
---|---|
[ C# ] 인터페이스 ( interface ) (0) | 2023.01.16 |
[ C# ] 상속 (0) | 2023.01.13 |
[ C# ] 델리게이트 , 이벤트 (0) | 2023.01.12 |
[ C# ] 인덱서 Indexer (0) | 2023.01.12 |