메서드 재정의는 Java 다형성의 핵심 개념 중 하나이며, 하위 클래스가 상위 클래스에 이미 정의된 메서드의 특정 구현을 제공할 수 있도록 합니다. 이 강력한 기능은 런타임 다형성을 달성하는 데 도움이 되며 동적 메서드 디스패치를 가능하게 합니다. 이번 게시물에서는 메서드 재정의를 철저하게 이해하기 위해 필수 개념, 규칙 및 실제 사례를 자세히 살펴보겠습니다.
메서드 재정의는 하위 클래스가 동일한 메서드 시그니처(동일한 이름, 매개변수 및 반환 유형 또는 공변 반환 유형)를 사용하여 상위 클래스의 메서드를 재정의할 때 발생합니다. 컴파일 타임에 해결되는 메서드 오버로딩과 달리 메서드 재정의는 런타임 다형성을 달성합니다. 여기서 호출되는 실제 메서드는 객체의 런타임 유형에 따라 다릅니다.
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()은 비공개이므로 하위 클래스에서 상속되지 않으므로 재정의할 수 없습니다.
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()를 호출하면 하위 버전이 호출됩니다. 이것이 런타임 다형성이 실제로 실행되는 모습입니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!