많은 학생들이 어리 석고 과부하와 오버로드의 차이를 말할 수 없습니다. Rote에 의해 개념적 지식을 암기하지 않고 그것을 이해하고 암기하는 것이 좋습니다.
먼저 내 정의를하겠습니다.
과부하 : 동일한 클래스 또는 상속 관계에서 이름과 다른 매개 변수를 가진 메소드 그룹. 본질적으로, 그것은 다른 방법의 이름입니다.
재정의 : 상속 관계가있는 두 클래스 사이에서 부모 클래스에 존재하는 메소드는 서브 클래스에서 재정의됩니다. 본질은 동일한 방법에 대해 다른 구현을 제공하는 것입니다.
먼저 과부하의 예를 살펴 보겠습니다.
public class overloadparent {public string getperson (문자열 이름) {return "persona" + name; } public String getPerson (int age) {return "personb"; } public String getPerson (문자열 이름, int age) {return "personc"; } public void getPerson (문자열 이름) {System.out.println ( "IVerlyed Method?"); }} 공개 클래스 오버로드 체일 텍스트 과부하 회전 {public void getperson (double money) {System.out.println ( "나는 과부하 된 방법"); }}관찰에주의하십시오 :
(1) 과부하 기간 동안 같은 이름을 가진 4 가지 방법이 있습니다.
(2) 처음 세 가지 방법의 매개 변수 유형과 숫자는 일치하지 않으며 반환 값은 동일하며 이는 과부하를 구성합니다.
(3) 방법 4 및 방법 1 만 반환 값은 다르고 과부하를 구성하지 않으며 컴파일러가 전달되지 않습니다.
추신 : 리턴 값은 메소드 실행의 결과입니다. 메소드를 호출 할 때 "XXX 유형의 리턴 값을 가진 메소드를 호출하려는"을 지정하지 않으면 메소드 과부하의 기능이되지 않습니다.
(4) 과부하 회전은 데모를 상속하고 데모에 소유 한 모든 방법이 있습니다. 기존 방법이 요구를 충족시킬 수 없다고 생각했기 때문에 단순히 과부하가 걸렸습니다.
오버로드 된 플래그 : 메소드 이름은 동일하고 매개 변수는 다르며 (번호 또는 유형) 반환 값과 관련이 없습니다.
덮어 쓰기의 예를 살펴 보겠습니다.
공개 클래스 재정의 {public void fly () {System.out.println ( "ican fly!"); }} Public Class OverrideChild는 OverrideParent {@override public void fly () {System.out.println ( "iCan't Fly,하지만 실행할 수 있습니다!")을 확장합니다. } public static vid main (String [] args) {OverwriteParent child = new OverwriteChild (); child.fly (); }}OverideChild의 기본 메소드를 실행할 때 출력은 무엇입니까?
대답은 : 나는 할 수 없지만 달릴 수 있습니다!
우리는 다음을 본다 :
(1) OverideChild와 Overrideparent는 비행 방법을 가지고 있습니다
(2) 비행의 반환 값과 수정자는 동일하며 방법 본문 만 다릅니다.
(3) 서브 클래스의 파리 방법 전에 @overwrite에 주석이 있습니다. JDK1.5가 나타나고 클래스 상속에만 사용됩니다. 1.6은 인터페이스 구현에 사용할 수 있습니다. 이 주석은 컴파일러 점검에 도움이되며 추가하지 않아도됩니다.
재정의 플래그 : 아동은 상위 클래스를 물려 받고 동일한 방법에 대해 다른 구현을 가지고 있습니다.
응용 프로그램 시나리오
오버로드 : 메소드 함수가 비슷하지만 다른 매개 변수를 전달해야합니다.
재정의 : 서브 클래스에 고유 한 동작이있는 경우 부모 클래스에서 물려 받고 자체 요구를 충족시킬 수 없습니다.
추신 : 과부하 및 덮어 쓰기는 다형성의 징후입니다. 전자는 컴파일러 다형성이고, 후자는 런타임 다형성이다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!