간단한 상속, 재정의 예제
꽁스짱
C#
0
967
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 :: 진도개가 짖다.