>  기사  >  Java  >  오버로드된 메서드를 호출할 때 서브클래스에서 오류 메시지가 생성되는 이유는 무엇입니까?

오버로드된 메서드를 호출할 때 서브클래스에서 오류 메시지가 생성되는 이유는 무엇입니까?

PHPz
PHPz원래의
2024-03-08 11:15:03411검색

오버로드된 메서드를 호출할 때 서브클래스에서 오류 메시지가 생성되는 이유는 무엇입니까?

오버로드된 메서드를 호출할 때 하위 클래스가 오류 메시지를 생성하는 이유는 무엇입니까?
객체 지향 프로그래밍에서 오버로딩은 동일한 클래스에 동일한 이름을 가진 여러 메서드를 정의하는 기술입니다. 오버로드된 메서드를 호출할 때 컴파일러는 메서드의 매개 변수 유형, 번호 또는 순서를 기반으로 호출할 특정 메서드를 결정합니다. 그러나 하위 클래스가 상위 클래스에 정의된 오버로드된 메서드를 상속하는 경우 일부 오류 메시지가 나타날 수 있습니다. 이유는 무엇입니까? 구체적인 코드 예제를 통해 이를 설명하겠습니다.

오버로드된 메소드 public void print(int a)public void print(String s)를 정의하는 상위 클래스 Parent가 있다고 가정합니다. , 하위 클래스 Child는 상위 클래스를 상속하고 이 두 가지 오버로드된 메서드를 호출하려고 시도합니다. 다음 샘플 코드를 살펴보겠습니다. Parent 中定义了一个重载方法 public void print(int a)public void print(String s),子类 Child 继承了父类并尝试调用这两个重载方法。我们来看看下面的示例代码:

public class Parent {
    public void print(int a) {
        System.out.println("Printing integer: " + a);
    }

    public void print(String s) {
        System.out.println("Printing string: " + s);
    }
}

public class Child extends Parent {
    public static void main(String[] args) {
        Child child = new Child();
        child.print(10);  // 调用父类的重载方法 print(int a)
        child.print("Hello");  // 调用父类的重载方法 print(String s)
    }
}

在上面的代码中,子类 Child 实例化后分别调用了父类 Parent 中的重载方法,这个示例是没有问题的,我们成功地调用了两个重载方法并输出了正确的结果。但是,当子类中重载同名方法时,就有可能会产生错误信息。让我们看下面的示例:

public class Child extends Parent {
    public void print(double d) {
        System.out.println("Printing double: " + d);
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.print(10);  // Error: The method print(int) is ambiguous for the type Child
        child.print("Hello");  // 调用父类的重载方法 print(String s)
        child.print(10.5);  // 调用子类的重载方法 print(double d)
    }
}

在这个例子中,子类 Child 在继承父类的重载方法的同时,又添加了一个新的重载方法 public void print(double d)。当我们尝试调用 child.print(10) 时,编译器会出现错误信息:The method print(int) is ambiguous for the type Child,这是因为编译器无法确定应该调用父类的 print(int a) 还是子类的 print(double d)rrreee

위 코드에서 하위 클래스 Child는 인스턴스화 후 상위 클래스 Parent의 오버로드된 메서드를 호출합니다. 이 예제에서는 문제가 발생하여 오버로드된 메서드를 모두 성공적으로 호출하고 올바른 결과를 출력했습니다. 그러나 하위 클래스에서 동일한 이름의 메서드를 재정의하는 경우 오류 메시지가 생성될 수 있습니다. 다음 예를 살펴보겠습니다.

rrreee

이 예에서 하위 클래스 Child는 상위 클래스의 오버로드된 메서드를 상속하고 새로운 오버로드된 메서드 public void print(double d)를 추가합니다. 코드>. <code>child.print(10)를 호출하려고 하면 컴파일러는 오류 메시지를 표시합니다. print(int) 메소드는 Child 유형에 대해 모호합니다. 이는 컴파일러가 부모를 결정할 수 없기 때문입니다. 클래스는 print(int a) 또는 하위 클래스의 print(double d)를 호출해야 합니다.

이 문제를 해결하려면 호출할 메서드를 명시적으로 지정하거나 하위 클래스에서 상위 클래스의 기존 메서드가 오버로드되는 것을 방지할 수 있습니다. 하위 클래스의 메서드가 상위 클래스의 메서드와 충돌하면 컴파일러는 어떤 메서드를 호출할지 결정할 수 없으므로 오류 메시지가 생성됩니다. 🎜🎜객체 지향 프로그래밍에서는 오버로딩과 상속의 개념을 이해하는 것이 매우 중요합니다. 이러한 기능을 완전히 이해해야만 더욱 강력하고 명확한 코드를 작성할 수 있습니다. 🎜

위 내용은 오버로드된 메서드를 호출할 때 서브클래스에서 오류 메시지가 생성되는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.