간단한 상속, 재정의 예제
					
						꽁스짱					
																
							
							
							C#						
										
					
					0					
					
					3784
															
						
						
							2021.02.15 22:54						
					
				
			간단한 상속, 재정의 예제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
	class Dog
	{
		//개의 일반적인 속성과 행동을 정의 
		public string kinds;
		public virtual void jitda()  //가상메소드만 재정의 가능하므로 virtual 이라함
		{
			Console.WriteLine("Dog :: 일반개가 짖다.");
		}
	}
	//파생클래스인 Pudle은 Dog의 전부를 상속받아서 사용하며, 자신만의 메소드인 work()를 구현, 
	//상속은 상위클래스의 속성, 행동을 재활용하고 자신만의 속성(멤버변수, 필드)과 행동(메소드)을 정의 
	//성속을 함으로서 공통적인 부분은 재활용 할 수 있다. 
	class Pudle : Dog
	{
		public Pudle()  //생성자, new Pudle() 할때 호출됨 
		{
			base.kinds = "푸들";  //기반클래스인 Dog의 kinds를 의미한다. 
			Console.WriteLine("푸들 생성자~~");
		}
		//일반개와 달리 푸들은 일을 한다. 
		public void work()
		{
			Console.WriteLine("푸들이 일을 합니다~");
		}
		public override void jitda()  //기반클래스 Dog의 jitda() 를 재정의, override키워드 사용
		{
			Console.WriteLine("Pudel :: 푸들이 짖다.");
		}
	}
	//파생클래스인 Jindo은 Dog의 전부를 상속받아서 사용하며, 자신만의 메소드인 work()를 구현, 
	//상속은 상위클래스의 속성, 행동을 재활용하고 자신만의 속성(멤버변수, 필드)과 행동(메소드)을 정의 
	//성속을 함으로서 공통적인 부분은 재활용 할 수 있다. 
	class Jindo : Dog
	{
		public Jindo()  //생성자, new Jindo() 할때 호출됨 
		{
			base.kinds = "진도개";  //기반클래스인 Dog의 kinds를 의미한다. 
			Console.WriteLine("진도개 생성자~~");
		}
		//일반개와 달리 진도개는 잘 달린다. 
		public void run()
		{
			Console.WriteLine("진도개가 달립니다~");
		}
		public override void jitda()  //기반클래스 Dog의 jitda() 를 재정의, override키워드 사용
		{
			Console.WriteLine("Jindo :: 진도개가 짖다.");
		}
	}
	class DogTest
	{
		static void Main()
		{
			Pudle p1 = new Pudle();
			p1.jitda();
			p1.work();   //Pudle에만 정의한 메소드
			Jindo j1 = new Jindo();
			j1.jitda();
			j1.run();    //Jiindo 에만 정의한 메소드
			//Pudle이 자식 클래스이므로 좌측 p2의 타입에 부모클래스인 Dog이 올수있다. 
			//힙공간에 생성되는 Pudle의 인스턴스에는 Dog, Object클래스의 인스턴스도 포함되어 있으므로
			//Pudle은 완벽한 Dog, Pudle은 완변한 Object 이다.
			//파생클래스인 Pudle을 new하면 제일 먼저 Object 클래스를 new하고, Dog클래스를 new 한후 자신인 Pudle이 생성된다.
			Dog p2 = new Pudle();
			Console.WriteLine("p2.kinds --> " + p2.kinds);
			p2.jitda();   //자식인 Pudle에서 재정의된 jitda()가 호출, 다형성(Polymorphism)
			//p2.work();  //에러, p2의 타입인 Dog에는 work()메소드가 정의 되어 있지않다. 
			Dog j2 = new Jindo();
			Console.WriteLine("j2.kinds --> " + j2.kinds);
			j2.jitda();   //자식인 Jindo에서 재정의된 jitda()가 호출, 다형성(Polymorphism)
			//j2.run();  //에러, p2의 타입인 Dog에는 run()메소드가 정의 되어 있지않다. 
		}
	}
}
[결과]
푸들 생성자~~
Pudel :: 푸들이 짖다.
푸들이 일을 합니다~
진도개 생성자~~
Jindo :: 진도개가 짖다.
진도개가 달립니다~
푸들 생성자~~
p2.kinds --> 푸들
Pudel :: 푸들이 짖다.
진도개 생성자~~
j2.kinds --> 진도개
Jindo :: 진도개가 짖다.

 
															
