재작성은 하위 클래스가 상위 클래스에 대한 액세스를 허용하는 메소드 구현을 재작성하는 프로세스입니다. 반환 값이나 형식 매개변수는 변경할 수 없습니다. 즉, 쉘은 변경되지 않고 코어는 다시 작성됩니다!
재정의의 장점은 하위 클래스가 필요에 따라 자체 동작을 정의할 수 있다는 것입니다. 즉, 하위 클래스는 필요에 따라 상위 클래스의 메서드를 구현할 수 있습니다.
재정의 메서드는 새로 확인된 예외나 재정의된 메서드에 의해 선언된 것보다 더 광범위한 예외를 발생시킬 수 없습니다. 예:
동물 수업{
공개 무효 이동(){
System.out.println("동물은 움직일 수 있습니다");
} }
클래스 개는 동물을 확장합니다{
공개 무효 이동(){
System.out.println("개는 달리고 걸을 수 있습니다");
} }
그런 다음 다음을 인용합니다.
Animal a = new Animal(); // 동물 객체
동물 b = new Dog(); // 개 객체
a.move();//Animal 클래스의 메소드 실행
b.move();//Dog 클래스의 메소드 실행
출력은 다음과 같습니다:
动物可以移动 狗可以跑和走
위의 예에서 볼 수 있듯이 b는 Animal 유형에 속하지만 Dog 클래스의 move 메서드(우리가 재정의한 메서드)를 실행합니다.
이는 컴파일 단계에서 매개변수의 참조 유형만 확인하기 때문입니다.
그러나 런타임 시 JVM(Java Virtual Machine)은 객체의 유형을 지정하고 객체의 메서드를 실행합니다.
따라서 위의 예에서는 Animal 클래스에 move 메소드가 존재하기 때문에 컴파일이 성공한 것입니다. 그러나 런타임에는 특정 객체의 메소드가 실행됩니다.
1. 매개변수 목록은 재정의된 메서드의 목록과 정확히 동일해야 합니다.
2. 반환 유형은 재정의된 메서드의 반환 유형과 다를 수 있지만 상위 클래스 반환 값의 파생 클래스여야 합니다.
3. 접근 권한은 상위 클래스에서 재정의된 메소드의 접근 권한보다 낮을 수 없습니다.
4. 상위 클래스의 멤버 메소드는 해당 하위 클래스에 의해서만 재정의될 수 있습니다. 동일한 패키지의 하위 클래스가 private 및 final로 선언된 메서드를 제외한 모든 상위 클래스 메서드를 재정의할 수 있는 경우.
5. final로 선언된 메서드는 재정의할 수 없고, static으로 선언한 메서드는 재정의할 수 없지만 다시 선언할 수 있습니다.
6. 하위 클래스와 상위 클래스가 동일한 패키지에 없는 경우 하위 클래스는 공개 및 보호로 선언된 상위 클래스의 최종이 아닌 메서드만 재정의할 수 있습니다.
7. 재정의된 메서드는 재정의된 메서드가 예외를 발생시키는지 여부에 관계없이 모든 비필수 예외를 발생시킬 수 있습니다. 그러나 재정의된 메서드는 새로운 필수 예외 또는 재정의된 메서드에 의해 선언된 것보다 더 광범위한 필수 예외를 발생시킬 수 없으며 그 반대의 경우도 마찬가지입니다.
C++과 같은 의미입니다.
오버로딩은 클래스 내에서 이름은 같지만 매개변수가 다른 메서드입니다. 반환 유형은 동일하거나 다를 수 있습니다.
오버로드된 각 메서드(또는 생성자)에는 고유한 매개 변수 유형 목록이 있어야 합니다.
가장 일반적으로 사용되는 위치는 생성자의 오버로딩입니다.
재정의와의 차이점은 오버로딩이 다른 매개변수에 초점을 맞춘다는 것입니다.
다형성은 동일한 행동이 여러 가지 다른 표현이나 모양을 가질 수 있는 능력입니다. 다형성은 서로 다른 인스턴스를 사용하여 서로 다른 작업을 수행하는 동일한 인터페이스입니다.
인터페이스를 잘 적용하기 위해서는 다형성의 개념을 배우는 것이 매우 중요합니다.
다형성이 존재하기 위한 세 가지 필수 조건:
1.상속
2. 다시 작성
3. 상위 클래스 참조는 하위 클래스 객체를 가리킵니다
예를 들어, 이 예에서 상위 클래스의 참조는 하위 클래스의 객체를 가리킵니다.
상위 p = 새 하위();
참고: 다형성을 사용하여 메소드를 호출하는 경우 먼저 해당 메소드가 상위 클래스에 있는지 확인하십시오. 존재하지 않으면 컴파일 오류가 발생하며, 하위 클래스에서 동일한 이름의 메소드를 호출하십시오.
가상 함수는 다형성의 기초 중 하나입니다. 물론 JAVA의 모든 함수는 기본적으로 C++ 의미의 가상 함수이므로 동적 바인딩이 Java의 기본 동작이므로 특별히 주의할 필요가 없습니다.
함수가 Java에서 가상 함수 특성을 갖지 않도록 하려면 final 키워드를 추가하여 비가상 함수로 만들 수 있습니다.
위 내용은 Java 재작성, 오버로딩 및 다형성을 정의하고 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!