추천, 2024

에디터의 선택

메소드 오버로딩과 오버라이드의 차이점

메서드 오버로딩
함수 오버로딩 또는 컴파일 시간 다형성이라고도하는 메서드 오버로드는 동일한 이름이지만 동일한 범위에서 다른 서명을 갖는 두 개 이상의 메서드를 갖는 개념입니다. 이 기능을 지원하는 많은 프로그래밍 언어가 있습니다 : Ada, C ++, C #, D 및 Java.

C #에서 메서드 오버로드 예제

오버로드 쉐이프 {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int 다각형 (int 길이, int 너비) {int rectangleArea = length * breadth; } int 다각형 (int면) {int squareArea = side * side; }}
1 2 3 4 5 6 7 8 9 10 11 12 13 14오버로드 쉐이프 {float Polygon (int radius, float pi) {float circleArea = pi * radius * radius; } int 다각형 (int 길이, int 너비) {int rectangleArea = length * breadth; } int 다각형 (int면) {int squareArea = side * side; }}

위의 예에서 보듯이 'Polygon'메소드는 다른 메소드 서명으로 3 번 오버로드됩니다. 즉, 매개 변수의 유형 또는 개수가 다릅니다.

메서드 재정의
함수 재정의 또는 런타임 다형성이라고도하는 메서드 재정의는 자식 클래스가 부모 클래스에 정의 된 메서드에 자체 구현을 제공 할 수있게 해주는 OOP 기능입니다. 자식 클래스의 메서드가 동일한 이름, 서명 및 반환 형식을 가져야하는 경우 자식 클래스의 구현은 기본 클래스의 메서드 정의를 재정의합니다.

C #에서 메서드 재정의 예제

class Source1 {public void draw () {Console.Writeline ( "나는 클래스 Source1에있다"); }} class Source2 extends Source1 {public void draw () {Console.Writeline ( "나는 클래스 2에있다"); }}
1 2 3 4 5 6 7 8 9 10class Source1 {public void draw () {Console. 작문 ( "나는 수업 1 출신이다"); }} 클래스 Source2 extends Source1 {public void draw () {Console. 작문 ( "나는 수업 2에있다"); }}

여기서 Source2 클래스의 draw 메서드는 Source1 클래스에 정의 된 draw 메서드를 재정의합니다.

메소드 오버로딩과 메소드 오버라이드의 차이점

  1. 메소드 오버로드 메소드에는 다른 서명이 있어야합니다. 메서드에서 재정의 메서드는 동일한 서명을 가져야합니다.
  2. 함수 오버로딩은 메서드의 동작을 "추가"또는 "확장"하는 것입니다. 함수 오버라이드는 메서드의 동작을 완전히 "변경"하거나 "재정의"하는 것입니다.
  3. 메소드 오버로딩은 컴파일 시간 다형성을 달성하는 데 사용됩니다. 메서드 재정의는 런타임 다형성을 달성하는 데 사용됩니다.
  4. 메소드 / 함수 오버로딩에서 컴파일러는 어떤 객체가 컴파일시에 어떤 클래스에 할당되었는지를 알고 있지만, 이 정보를 오버라이드하는 메소드에서는 런타임까지 알 수 없습니다.
  5. 오버라이드가 기본 클래스에서 파생 된 클래스에서 수행되는 반면 Function 오버로드는 동일한 클래스에서 수행됩니다.
Top