하위 클래스가 오버로드된 메서드를 호출할 때 예외가 발생하는 이유는 무엇입니까?
객체 지향 프로그래밍에서 오버로딩은 동일한 클래스에 여러 메서드를 정의하는 것을 의미합니다. 이러한 메서드는 이름은 같지만 매개변수 목록이 달라서 서로 다른 기능 구현을 달성합니다. 하위 클래스가 상위 클래스로부터 상속받을 때 하위 클래스에 동일한 이름을 가진 메서드의 오버로드가 있으면 예외가 발생할 수 있습니다.
하위 클래스가 오버로드된 메서드를 호출할 때 예외가 발생하는 이유를 더 구체적으로 설명하려면 다음 코드 예제를 살펴보겠습니다.
class Parent { void display() { System.out.println("Parent class display method"); } void display(int num) { System.out.println("Parent class display method with parameter"); } } class Child extends Parent { void display() { System.out.println("Child class display method"); } } public class Main { public static void main(String[] args) { Parent parent = new Child(); parent.display(); parent.display(10); } }
위 코드에서는 상위 클래스 Parent
를 정의하고 하위 클래스 Child
. 상위 클래스에는 두 개의 오버로드된 display
메서드가 있습니다. 즉, 매개 변수가 없는 버전과 정수 매개 변수가 있는 버전입니다. 하위 클래스 Child
는 상위 클래스 Parent
에서 상속되며 상위 클래스의 display
메서드를 재정의합니다. Parent
和一个子类 Child
,父类中有两个重载的 display
方法,分别是没有参数的版本和带一个整型参数的版本。子类 Child
继承自父类 Parent
,并且重写了父类中的 display
方法。
在 Main
类中,我们创建了一个父类的引用指向子类的对象。然后尝试分别调用 display
方法和 display(int num)
方法。根据多态的原则,由于引用变量是父类类型,实际对象是子类类型,所以调用的应该是子类 Child
中的方法。
然而,当运行程序时,会发现只有 display
方法被调用,而调用 display(int num)
方法时会产生编译错误。这是因为在继承关系中,子类重载父类的方法,并不会覆盖父类的方法,而只是新增了一个重载的方法。因此,当通过父类引用调用重载方法时,编译器会选择调用父类中定义的方法,而不是子类中重载的方法。
为了解决这个问题,我们可以通过将父类中的方法声明为 final
Main
클래스에서는 상위 클래스에서 하위 클래스의 객체에 대한 참조를 만듭니다. 그런 다음 display
메서드와 display(int num)
메서드를 각각 호출해 보세요. 다형성의 원리에 따라 참조변수는 상위 클래스 유형이고 실제 객체는 하위 클래스 유형이므로 하위 클래스 Child
의 메서드를 호출해야 합니다. 그러나 프로그램을 실행해보면 display
메서드만 호출되는 것을 볼 수 있으며, display(int num)
메서드를 호출하면 컴파일 오류가 발생합니다. 상속 관계에서 하위 클래스가 상위 클래스의 메서드를 재정의하면 상위 클래스의 메서드를 덮어쓰지 않고 오버로드된 새 메서드만 추가하기 때문입니다. 따라서 오버로드된 메서드가 부모 클래스 참조를 통해 호출되면 컴파일러는 자식 클래스의 오버로드된 메서드 대신 부모 클래스에 정의된 메서드를 호출하도록 선택합니다. 🎜🎜이 문제를 해결하기 위해 상위 클래스의 메서드를 final
으로 선언하거나 하위 클래스의 상위 클래스에 있는 모든 메서드를 오버로드하여 하위 클래스의 메서드를 메서드라고 부르도록 할 수 있습니다. 예외를 발생시키지 않고. 🎜🎜결론적으로, 상속 관계에서 상위 클래스의 메소드를 오버로드하는 하위 클래스는 상위 클래스의 메소드를 오버라이드하지 않기 때문에 하위 클래스가 오버로드된 메소드를 호출하면 예외가 발생하므로 사용할 때 이를 방지하기 위해 주의해야 합니다. 상황이 발생합니다. 🎜위 내용은 하위 클래스가 오버로드된 메서드를 호출할 때 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!