본문 바로가기

   
Programming/C#

클래스 상속, 오버라이딩

반응형

클래스 상속(Inheritance)

 - 부모 객체의 멤버를 자식 객체가 물려 받는 것

 - 코드의 재사용

 - 코드의 확장

 - 상속(Inheritance)

 - 파생(Derive)

 - 확장(Extend)

 - 슈퍼(super)클래스 - 서브(sub)클래스

 - 부모클래스 - 자식 클래스

 - 기본 클래스 - 파생 클래스

코드의 재사용 하기위해서 상속 개념 이용

 

상속시..

 - public 은 상속이 가능하고, 자식클래스에서도 public이 된다.

 - private은 상속은 가능한데, 자식클래스조차도 접근 불가능!!

 - protected은 상속이 가능하고, 자식클래스에서만 접근 가능

 - public(공개) > protected > private(비공개)

상속관계에서는 public 처럼 작동하는것이 protected

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class Inheritance

       {

             static void Main(string[] args)

             {

                    Childe c = new Childe();

                    c.n = 10;

                    c.Hello();

 

                    //protected private 처럼 작동

                    //c.o;

 

                    Descendant d = new Descendant();

                    d.Hello();                

             }

       }

 

       //부모 클래스

       class Parent

       {

             //멤버변수

             public int n;

             private int m;

             protected int o;

 

             //멤버 메서드(정적은 상속 개념이 없다.)

             public void Hello()

             {

                    Console.WriteLine("ㅎㅇ~ 숫자 : {0}", this.n);

             }

       }

 

       //자식 클래스

       class Childe : Parent

       {

             public void Test()

             {

                    //this.m?

                    //1. 상속이 안되는건지?

                    //2. 상속은 됐는데 안보이는건지? O

 

                    //부모클래스에서 선언된 protected

                    this.o = 10;

             }

       }

 

       class Descendant : Childe

       {

 

       }

}

 

 




Object

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Test

{

       class object01

       {

             static void Main(string[] args)

             {

                    Test t = new Test();

                    Random rnd = new Random();

                    t.

 

                    //System.Object

                    // - 닷넷의 존재하는 모든 클래스의 최상위 클래스

                    // - 단군할아버지(시초)

             }

       }

 

       class Test : System.Object

       {

 

       }

}

 

 

오버라이딩(Overriding)

 - 최우선의, 가장 중요한; 압도적인

 - 클래스 상속관계에서 구현 가능한 기술

 - 부모 클래스의 메서드를 자식에게 물려줬는데... 자식도 동일한 이름의 메서드 정의할때

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleEx

{

       //Ex91_overriding.cs

       class Ex91_overriding

       {

             static void Main(string[] args)

             {

                    Parent p = new Parent();

                    p.Test();

 

                    Child c = new Child();

//부모의 메서드의 자식의 메서드가 이름이 같으며 항상 자식객체를 통해서 접근하는 메서드는 자식의 메서드가 된다.!!

                    c.Test();

             }

       }

 

       class Parent

       {

             public int a;

             public void Test()

             {

                    Console.WriteLine("a : " + this.a);

             }

       }

 

       class Child : Parent

       {

             public int b;

             public void Test()

             {

                    Console.WriteLine("b : " + this.b);

             }

       }

 

}

 

 

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace ConsoleEx

{

       //Ex92_Overriding.cs (2012_2_22_7st) (print 예제는 Overriding 아님)

       class Ex92_Overriding

       {

             static void Main(string[] args)

             {

                    Printer p = new Printer("홍길동", "LG1100");

                    p.Print();

 

                    HP640 hp = new HP640();

                    hp.Print();

 

                    Random rnd = new Random();

                    int n = rnd.Next(1, 101);

 

                    UserRandom rnd2 = new UserRandom();

                    int m = rnd2.AAA();

 

             }

       }

 

       class UserRandom : Random

       {

             public int AAA()

             {

                    return this.Next(1, 101);

             }

       }

 

       //신형 프린터 -> 상당수의 기능이 Printer와 유사

       class HP640 : Printer

       {

             //HP640만의 멤버 추가 -> 기능 확장(변수, 메서드)

             public int ink; //잉크량 저장하는 멤버 추가

 

             //향상된 출력 -> 부모보다 좋은 기능(개량)

             // new : 부모의 메서드를 감추겠습니다. (new 를보고 부모클래스에도 같은 메서드이름인 Print가 있다고 예상                   할수있다.)

             public new void Print()

             {

                    Console.WriteLine("HP640 출력기능 : {0},{1},{2}", this.owner, this.name, this.ink);

             }

 

       }

 

       //프린터 클래스

       class Printer

       {

             protected string owner; //소유자

             protected string name; //모델명

 

             public Printer()

             {

                    this.owner = "";

                    this.name = string.Empty; //Empty : public으로 열려있는 멤버변수라고 생각하자.

             }

 

             public Printer(string owner, string name)

             {

                    this.owner = owner;

                    this.name = name;

             }

 

             //프린터 -> 출력(기능) -> 메서드 -> Print()

             public void Print()

             {

                    Console.WriteLine("Print 클래스 출력 기능: {0}, {1}", this.owner, this.name);

             }

       }

}

 





 

반응형