간단한 상속, 재정의 예제

홈 > 공유팁! > 프로그램 관련
프로그램 관련

간단한 상속, 재정의 예제

꽁스짱 0 1103
간단한 상속, 재정의 예제



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 :: 진도개가 짖다.
0 Comments
제목