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