많은 학생들이 어리 석고 과부하와 오버로드의 차이를 말할 수 없습니다. Rote에 의해 개념적 지식을 암기하지 않고 그것을 이해하고 암기하는 것이 좋습니다.
먼저 내 정의를하겠습니다.
먼저, 과부하에 대해 이야기합시다
(1) 메소드 과부하는 클래스가 다른 유형의 데이터를 통합 방식으로 처리하도록하는 수단입니다. 이름이 같은 여러 기능이 동시에 다른 매개 변수/유형으로 존재합니다. 과부하는 클래스에서 다형성의 징후입니다.
(2) Java Method Overloading은 클래스에서 여러 메소드를 생성 할 수 있고 이름이 동일하지만 매개 변수와 다른 정의가 다릅니다. 메소드를 호출 할 때, 우리는 전달되는 다른 매개 변수와 매개 변수 유형의 수로 사용할 방법을 결정합니다. 이것은 다형성입니다.
(3) 오버로드시 메소드 이름은 동일해야하지만 매개 변수 유형과 숫자는 다르며 반환 값 유형은 동일하거나 다를 수 있습니다. 반환 유형은 과부하 기능의 차이점으로 사용할 수 없습니다.
먼저 과부하의 예를 살펴 보겠습니다.
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 class overloadchildextends overloadparent {public void getperson (double money) {system.out.println ( "나는 과부하 된 메소드"); }}관찰에주의하십시오 :
(1) 과부하 기간 동안 같은 이름을 가진 4 가지 방법이 있습니다.
(2) 처음 세 가지 방법의 매개 변수 유형과 숫자는 일치하지 않으며 반환 값은 동일하며 이는 과부하를 구성합니다.
(3) 방법 4 및 방법 1 만 반환 값은 다르고 과부하를 구성하지 않으며 컴파일러가 전달되지 않습니다.
추신 : 리턴 값은 메소드 실행의 결과입니다. 메소드를 호출 할 때 "XXX 유형의 리턴 값을 가진 메소드를 호출하려는"을 지정하지 않으면 메소드 과부하의 기능이되지 않습니다.
(4) 과부하 회전은 데모를 상속하고 데모에 소유 한 모든 방법이 있습니다. 기존 방법이 요구를 충족시킬 수 없다고 생각했기 때문에 단순히 과부하가 걸렸습니다.
오버로드 된 플래그 : 메소드 이름은 동일하고 매개 변수는 다르며 (번호 또는 유형) 반환 값과 관련이 없습니다.
그런 다음 재정의에 대해 이야기합시다 (재정의)
(1) 부모 클래스와 아동 계급 사이의 다형성은 부모 클래스의 기능을 재정의합니다. 서브 클래스로 정의 된 메소드가 부모 클래스와 동일한 이름과 매개 변수를 갖는 경우 메소드가 재정의된다고 말합니다. Java에서 서브 클래스는 동일한 메소드를 다시 작성하지 않고 부모 클래스에서 메소드를 상속받을 수 있습니다.
그러나 때때로 서브 클래스는 상위 클래스의 메소드를 온전한 상속을 원하지 않고 오히려 특정 수정을 만들고 싶어하며,이 방법을 다시 작성해야합니다.
메소드 다시 쓰기를 메소드 덮어 쓰기라고도합니다.
(2) 서브 클래스의 메소드가 상위 클래스의 메소드와 동일한 메소드 이름, 리턴 유형 및 매개 변수 테이블을 갖는 경우 새 메소드는 원래 메소드를 무시합니다.
상위 클래스에 원래 메소드가 필요한 경우 현재 클래스의 상위 클래스를 나타내는 Super 키워드를 사용할 수 있습니다.
(3) 서브 클래스 함수의 액세스 수정 권한은 부모 클래스의 액세스 권한보다 작을 수 없습니다.
덮어 쓰기의 예를 살펴 보겠습니다.
공개 클래스 재정의 {public void fly () {System.out.println ( "ican fly!"); }} public class reverideChild는 OverrideParent를 확장합니다 {@override public void fly () {System.out.println ( "ICAN NOT FLY,하지만 실행할 수 있습니다!"); } public static vid main (String [] args) {OverwriteParent child = new OverwriteChild (); child.fly (); }}OverideChild의 기본 메소드를 실행할 때 출력은 무엇입니까?
대답은 : 나는 할 수 없지만 달릴 수 있습니다!
우리는 다음을 본다 :
(1) OverideChild와 Overrideparent는 비행 방법을 가지고 있습니다
(2) 비행의 반환 값과 수정자는 동일하며 방법 본문 만 다릅니다.
(3) 서브 클래스의 파리 방법 전에 @overwrite에 주석이 있습니다. JDK1.5가 나타나고 클래스 상속에만 사용됩니다. 1.6은 인터페이스 구현에 사용할 수 있습니다. 이 주석은 컴파일러 점검에 도움이되며 추가하지 않아도됩니다.
재정의 플래그 : 아동은 상위 클래스를 물려 받고 동일한 방법에 대해 다른 구현을 가지고 있습니다.
응용 프로그램 시나리오
오버로드 : 메소드 함수가 비슷하지만 다른 매개 변수를 전달해야합니다.
재정의 : 서브 클래스에 고유 한 동작이있는 경우 부모 클래스에서 물려 받고 자체 요구를 충족시킬 수 없습니다.
추신 : 과부하 및 덮어 쓰기는 다형성의 징후입니다. 전자는 컴파일러 다형성이고, 후자는 런타임 다형성이다.
재 작성 방법에 대한 규칙 :
1. 매개 변수 목록은 다시 작성되는 메소드와 정확히 동일해야합니다. 그렇지 않으면 다시 작성할 수는 없지만 과부하가 걸립니다.
2. 반환 된 유형은 항상 덮어 쓰기 메소드의 리턴 유형과 동일해야합니다. 그렇지 않으면 다시 쓰기라고 할 수는 없지만 과부하가 걸립니다.
3. 액세스 수정 자 제한은 다시 쓰여진 메소드의 액세스 수정 자보다 커야합니다 (공개> 보호> 기본> 비공개)
4. 재 작성 방법은 재 작성 방법 선언보다 새로운 점검 예외 또는 더 광범위하게 확인 된 예외를 던져서는 안됩니다. 예를 들어:
상위 클래스의 방법은 IOException 검사 예외를 선언합니다. 이 메소드를 다시 작성할 때 예외를 던질 수 없으며 IOException을 제외하고 서브 클래스를 던질 수 있으며 비 점검 예외를 던질 수 있습니다.
과부하 규칙 :
1. 다른 매개 변수 목록이 있어야합니다.
2. 매개 변수 목록이 다르면 당신을 꾸짖지 않는 반환 유형이있을 수 있습니다.
3. 다른 액세스 수정자가있을 수 있습니다.
4. 다른 예외를 던질 수 있습니다.
재 작성과 과부하의 차이점은 다음과 같습니다.
과부하 된 방법을 호출하면서 다형성을 재 작성하면 코드의 입력량을 크게 줄일 수 있습니다. 동일한 메소드 이름이 다른 매개 변수를 전달하는 한 다른 함수 또는 반환 값을 가질 수 있습니다.
재 작성 및 과부하를 잘 사용하는 경우 명확하고 간결한 구조로 클래스를 설계 할 수 있습니다. 코드 작성 과정에서 재 작성 및 과부하의 역할은 특별하다고 말할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.