>백엔드 개발 >C++ >메소드 상속에서`new '와`재정의 키워드의 차이점은 무엇입니까?

메소드 상속에서`new '와`재정의 키워드의 차이점은 무엇입니까?

DDD
DDD원래의
2025-01-28 11:56:09218검색

"신규"및 "재정의"키워드에 대한 이해 관계 객체 지향 프로그래밍에서 상속은 핵심 개념으로, 파생 상품이 기본 클래스의 동작을 확장하고 수정할 수 있도록합니다. 이러한 클래스를 정의 할 때 개발자는 새 구현을 다시 작성하거나 만들어야 할 수도 있습니다. 이 차이를 명확히하기 위해 다음 장면을 살펴 보겠습니다. 장면 1 : 기본 클래스 What's the Difference Between `new` and `override` Keywords in Method Inheritance?
이 문법은 기본 클래스에서 가상 메소드를 선언합니다. 가상 메소드는 미분 범주에 다시 작성하여 특정 구현을 제공 할 수 있습니다.

장면 1 : 디비전 클래스

파생 된 방법에서 "새"를 사용하면 새롭고 독립적 인 방법이 생성되며 그 이름은 기본 클래스의 메소드와 동일합니다. 그러나 이것은 다시 작성되는 것으로 간주되지 않으며 기본 클래스가 호출되면 기본 클래스 방법의 동작은 기본 클래스의 동작에 영향을 미치지 않습니다. 장면 2 : 기본 클래스

이것은 비 연방 방법이며 파생 클래스에서 다시 작성할 수 없습니다. 파생 상품은 "새로운"수정자를 사용하여 동일한 이름의 새로운 메소드를 달성해야합니다.

장면 2 : 디비전 클래스

"재정의"수정자는 미분 클래스의 메소드가 기본 클래스에서 동일한 서명의 다른 메소드를 다시 작성하고 있음을 나타냅니다. 기본 클래스에서 호출을 호출하면 다시 쓰기 방법이 실행됩니다. 실제 차이

재정의 : 메소드가 호출되는 한, 파생 클래스의 다시 쓰기 메소드가 호출됩니다.
<code class="language-c#">public virtual void DoIt();</code>
new :

파생 클래스 객체를 참조 할 때만 파생 클래스에서 생성 된 새로운 메소드가 호출됩니다.

권장 사용 일반적으로 확장 된 상속 방법의 동작이 권장되는 경우 "재정의"가 권장됩니다. 파생 클래스에서 동일한 이름의 새 메소드를 만들려면 "새"를 사용하십시오.

<code class="language-c#">public new void DoIt();</code>
다음 코드를 고려하십시오 <p> 이 예에서 "devived.doit ()"rewritten "base.doit ()"및 "b"variable "doit ()"메소드가 "b"변수 "파생"개체에서 호출 될 때. 그것을 부르기 위해 부름받을 것입니다. </p>

위 내용은 메소드 상속에서`new '와`재정의 키워드의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.