메서드 재정의 란 무엇입니까?
메소드 재정의는 상속 계층 구조 내 객체 지향 프로그래밍에서 사용되며, 수퍼 클래스에 정의 된 메소드가 서브 클래스에서 재정의 될 때 발생합니다. 일반적으로 서브 클래스 메소드는 수퍼 클래스 메소드와 다른 기능을 수행하거나 수퍼 클래스의 기능을 확장하지만, 반드시 그런 것은 아닙니다. 메소드 재정의는 재정의 된 메소드의 내용에 관계없이 서브 클래스에서 수퍼 클래스 메소드가 재정의 될 때마다 발생합니다. 재정의 된 메소드 서명은 정확히 같아야합니다.
예를 들어, 클래스 A에는 "doSomething"이라는 메소드가 포함될 수 있으며이 메소드는 입력 매개 변수를 사용하지 않습니다. 또한 클래스 B와 C는 클래스 A의 서브 클래스 일 수 있습니다. 클래스 B에는 입력 매개 변수를 사용하지 않는 "doSomething"이라는 메소드가 포함될 수 있으며, 클래스 C에는 입력 매개 변수로 숫자를 사용하는 "doSomething"메소드가 포함될 수 있습니다. 이 예제에서는 "doSomething"메소드가 수퍼 클래스 인 클래스 A와 동일한 메소드 서명을 가지기 때문에 클래스 B만이 메소드 대체를 보여줍니다. 반면에 클래스 C의 "doSomething"메소드는 메소드 오버로딩을 보여줍니다. 완전히 새로운 방법.
C ++의 가상 상속은 메서드 재정의의 또 다른 예입니다. 수퍼 클래스의 가상 메소드는 구현되거나 구현되지 않을 수 있지만 서브 클래스 정의는 메소드 대체의 인스턴스입니다. 서브 클래스에서 메소드를 대체 할 때, 수퍼 클래스의 메소드는 명시 적으로 호출되지 않는 한 호출되지 않습니다. 재정의 된 메소드를 호출하는이 특정 방법은 종종 수퍼 클래스 구현을 "숨기고"있다고합니다.
방법 재정의가 매우 유연하지만 모든 방법을 재정의 할 수있는 것은 아니며, 이러한 강성이 선호되는 경우가 있습니다. Java 및 C ++에서 메소드 서명에 특정 키워드를 적용하여 메소드가 서브 클래스에서 대체되지 않도록 할 수 있습니다. 이를 위해 Java는 "final"키워드를 사용하고 C ++은 "const"키워드를 사용합니다. 상속 트리 전체에서 특정 함수를 항상 변경하지 않으면 메소드 재정의를 방지하는 것이 좋습니다.
일반적으로 작은 데이터 조각을 얻는 간단한 방법은 재정의 할 필요가 없습니다. 재정의로 인해 가장 유리한 경우는 서브 클래스가 완전히 새로운 메소드를 작성하지 않고 수퍼 클래스 메소드에 기능을 추가하려는 경우입니다. 특정 유형의 객체에 대해 메소드를 완전히 다시 작성해야하는 비정상적인 경우도이 기술의 이점을 얻을 수 있습니다. 메소드가 대체 될 때마다 프로그래머가 수퍼 클래스 및 서브 클래스 메소드를 적절히 주석 처리하는 것이 중요합니다. 이상적으로, 이러한 의견은 각 방법의 변형이 무엇을하며 어떻게, 왜 다른지 명확히해야합니다.