다형성: Java의 디코딩 메서드 재정의
메서드 재정의는 Java 다형성의 핵심 개념 중 하나이며, 하위 클래스가 상위 클래스에 이미 정의된 메서드의 특정 구현을 제공할 수 있도록 합니다. 이 강력한 기능은 런타임 다형성을 달성하는 데 도움이 되며 동적 메서드 디스패치를 가능하게 합니다. 이번 게시물에서는 메서드 재정의를 철저하게 이해하기 위해 필수 개념, 규칙 및 실제 사례를 자세히 살펴보겠습니다.
메소드 재정의란 무엇인가요?
메서드 재정의는 하위 클래스가 동일한 메서드 시그니처(동일한 이름, 매개변수 및 반환 유형 또는 공변 반환 유형)를 사용하여 상위 클래스의 메서드를 재정의할 때 발생합니다. 컴파일 타임에 해결되는 메서드 오버로딩과 달리 메서드 재정의는 런타임 다형성을 달성합니다. 여기서 호출되는 실제 메서드는 객체의 런타임 유형에 따라 다릅니다.
1. 메서드 재정의 규칙
1. 메소드 서명 일관성:
- 하위 클래스의 메소드 이름과 매개변수 목록은 슈퍼클래스의 메소드와 정확히 일치해야 합니다.
2. 반환 유형 및 공변 반환 유형:
- 반환 유형은 동일하거나 공변 유형(수퍼클래스에 있는 원래 반환 유형의 하위 유형)이어야 합니다.
3. 접근 수정자:
- 하위 클래스의 메소드는 슈퍼클래스의 메소드보다 더 제한적인 액세스 수준을 가질 수 없습니다(예: 슈퍼클래스 메소드가 보호되는 경우 서브클래스는 이를 비공개로 설정할 수 없습니다).
공개 > 보호됨 > 기본값(Package-Private) > 비공개
4. 방법 가시성:
- 개인 메소드는 재정의될 수 없습니다. 대신 하위 클래스에서 재정의되면 완전히 새로운 메서드로 처리됩니다.
예: 기본 메소드 재정의
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
MethodOverridingParent에서는 상위 클래스 외부에서 액세스할 수 있는 display() 및 getCount()만 하위 클래스로 재정의할 수 있습니다. 그러나 getName()은 비공개이므로 하위 클래스에서 상속되지 않으므로 재정의할 수 없습니다.
2. 하위 클래스의 메소드 재정의
package oops.polymorphism; public class MethodOverridingChild extends MethodOverridingParent { // Access Level Increased; Default -> Protected @Override protected void display() { System.out.println("Child Method Called"); } public static void main(String[] args) { // Calling Parent Class Method MethodOverridingParent parent = new MethodOverridingParent(); parent.display(); // Output: Parent Method Called // Calling Child Class Overridden Method - Runtime Polymorphism MethodOverridingParent child = new MethodOverridingChild(); child.display(); // Output: Child Method Called } }
설명: 하위 클래스 MethodOverridingChild에서 display()가 재정의되었으므로 MethodOverridingChild 인스턴스에서 display()를 호출하면 하위 버전이 호출됩니다. 이것이 런타임 다형성이 실제로 실행되는 모습입니다.
3. 공변 반환 유형: 실제 예
Java의 공변 반환 유형 지원을 통해 하위 클래스는 상위 클래스의 반환 유형보다 더 구체적인 유형을 반환할 수 있습니다. 이 접근 방식은 SOLID 원칙의 리스코프 대체 원칙을 따르며 코드 유연성을 향상시킵니다.
package oops.polymorphism; // Base class public class MethodOverridingParent { // Private Methods CANNOT be overridden private String getName() { return "Hello"; } // Display method to be overridden (Access Modifier: default) void display() { System.out.println("Parent Method Called"); } // Return type is Number (parent class of Integer, Double, etc.) public Number getCount() { return 20; } }
설명: CovariantReturnType에서 getCount()는 Number의 하위 유형인 Integer를 반환하여 공변 반환 유형을 보여줌으로써 상위 메서드를 재정의합니다. Java에서는 재정의된 메서드의 액세스 수준을 줄일 수 없도록 요구하므로 메서드는 공개 상태로 유지됩니다.
메서드 오버라이딩과 메소드 오버로딩
- 메서드 재정의는 동적 다형성을 가능하게 하며 상속 계층에서 작동합니다.
- 메서드 오버로딩은 동일한 클래스 내에서 서로 다른 매개변수 유형이나 숫자를 사용하여 달성되는 정적 다형성의 한 형태입니다.
메서드 재정의를 사용하는 경우
- 동적 메서드 확인: 재정의 메서드는 개체 유형에 따라 런타임에 확인되므로 더 큰 유연성을 제공합니다.
- 동작 확장: 서브클래스는 슈퍼클래스 메서드의 기능을 수정하거나 확장할 수 있습니다.
결론
메서드 재정의를 이해하고 적용함으로써 객체 지향 프로그래밍 원칙
을 준수하는 보다 유연하고 재사용 가능하며 다형성적인 Java 애플리케이션을 구축할 수 있습니다.관련 게시물
Java 기초
어레이 인터뷰 필수
Java 메모리 필수
Java 키워드 필수
컬렉션 프레임워크 필수
즐거운 코딩하세요!
위 내용은 다형성: Java의 디코딩 메서드 재정의의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

일부 애플리케이션이 제대로 작동하지 않는 회사의 보안 소프트웨어에 대한 문제 해결 및 솔루션. 많은 회사들이 내부 네트워크 보안을 보장하기 위해 보안 소프트웨어를 배포 할 것입니다. ...

많은 응용 프로그램 시나리오에서 정렬을 구현하기 위해 이름으로 이름을 변환하는 솔루션, 사용자는 그룹으로, 특히 하나로 분류해야 할 수도 있습니다.

시스템 도킹의 필드 매핑 처리 시스템 도킹을 수행 할 때 어려운 문제가 발생합니다. 시스템의 인터페이스 필드를 효과적으로 매핑하는 방법 ...

IntellijideAultimate 버전을 사용하여 봄을 시작하십시오 ...

데이터베이스 작업에 MyBatis-Plus 또는 기타 ORM 프레임 워크를 사용하는 경우 엔티티 클래스의 속성 이름을 기반으로 쿼리 조건을 구성해야합니다. 매번 수동으로 ...

Java 객체 및 배열의 변환 : 캐스트 유형 변환의 위험과 올바른 방법에 대한 심층적 인 논의 많은 Java 초보자가 객체를 배열로 변환 할 것입니다 ...

전자 상거래 플랫폼에서 SKU 및 SPU 테이블의 디자인에 대한 자세한 설명이 기사는 전자 상거래 플랫폼에서 SKU 및 SPU의 데이터베이스 설계 문제, 특히 사용자 정의 판매를 처리하는 방법에 대해 논의 할 것입니다 ...

Redis 캐싱 솔루션은 제품 순위 목록의 요구 사항을 어떻게 인식합니까? 개발 과정에서 우리는 종종 a ... 표시와 같은 순위의 요구 사항을 처리해야합니다.
