앞의 예에 대한 해설

 

 

 

 

Ø 클래스 SportsCarCar(슈퍼 클래스) 양쪽에 메소드Run()”이 정의되어 있으므로,

    이 메소드는 오버라이딩된 메소드이다.

 

Ø SportsCar형의 객체 boxter로서 Run()를 호출하면, 오버라이딩메소드가 실행된다.

 

Ø 한편, boxter.Run(250)은 매개변수가 있기 때문에 int형 매개변수를 하나가진 메소드인

       Run(int i)가 실행되었다. 이 메소드는 오버로딩된 메소드이다.

 

 

 

 

 

예) Overriding과 Overloading(2)

 

 

 

 

 

class Program

{

  public static void Main()

  {

  SportsCar boxter = new SportsCar();

  boxter.Run();  //결과:  Overriding : 200km/h

  boxter.Run(250);  //결과:  Overloading : 250km/h

  }

}

 

 

 

 

 

예) Overriding과Overloading(1)

 

 

 

 

using System;

class Car

{

public void Run()

     {

  Console.WriteLine("Overrided : 100km/h");

}

}

 

 

class SportsCar : Car

{

public void Run()

{

Console.WriteLine("Overriding : 200km/h");

}

public void Run(int i)

{

Console.WriteLine("Overloading : "+i+"km/h");

}

}

 

 

 

 

 

 

메소드 오버로딩(overloading)

 

 

 

 

Ø 오버로딩
l 메소드 오버라이딩과는 달리, 메소드 명만 같고 매개변수의 개수 또는 매개변수 타입이 일치되지 않는

      경우를 메소드 오버로딩(overloading)이라고 한다.

l 메소드 오버라이딩과 메소드 오버로딩 사이의 개념의 차이를 명확하게 익힐 필요가 있다.
l 객체 지향 개념을 뒷받침하는 하나의 개념이다.

 

 

 

 

 

 

 

메소드 오버라이딩(overriding)

 

 

 

 

Ø 오버라이딩

 

    l 슈퍼 클래스에서 정의된 메소드를 서브 클래스에서 다시 정의하는 경우, 메소드의 매개변수의 개수와 타입이

                     서로 동일할 때 서브 클래스의 매소드는 슈퍼클래스의 메소드를 overriding 한다고 한다.

l 오버라이드된 메소드가 서브 클래스 내에서 호출되면 슈퍼클래스에 의해 정의된 메소드는 무시되고 서브 클래스에

       의해 정의된 메소드를 참조하게 된다.

Ø 주의
l C# 컴파일러는 오버라이드가 프로그래머의 실수일 가능성을 알려주기 위해 주의 메시지를 프린트한다.

 

 

 

 

 

 

 

앞의 예에 대한 해설

 

 

 

 

Ø case 1
l public Student() 생성자는 묵시적으로 슈퍼클래스의 기본 생성자를 수행한다.
l 생성자 People(string str1) 는 상속되지 않는다. 서브클래스에서 위와 같은 형식의 생성자를 수행하면 error가 발생한다.

 

Ø
case 2
l Public Student() : base(“kym")을 하면 Student() 생성자의 수행 이전에 슈퍼클래스의 People(srting str1) 생성자가 수행된다.

 

 

 

 

 

 

 

예제) 생성자의 상속(2) –case 2

 

 

 

 

class Student : People

{

  public int age = 0;

  public Student() : base(“kym")

  {

  this.age = 16;

  }

}

 

class Program

{

  public static void Main()

  {

  Student a = new Student();

  Console.WriteLine(a.name);

  }

}

 

 

 

 

예제) 생성자의 상속(2) –case 1

 

 

 

 

class Student : People

{

   public int age = 0;

     public Student(){

  this.age = 16;

   }

}

 

class Program{

   public static void Main(){

        Student a = new Student();

   //Student b = new Student("Boo..");  // 이건 에러..

   Console.WriteLine(a.name);

   }

}

 

 

 

 

 

+ Recent posts