public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Animal a=new Animal();
a.speak();
Animal d=new Dog();
d.speak(3);//
}
class Animal
{
public float speak()
{
System.out.println("I am a animal!");
return 0;
}
}
class Dog extends Animal
{
public double speak(int a)
{
System.out.println("Dog sparks!");
return 0;
}
}
}
방금 Java에서 오버라이드 및 오버로드를 학습했습니다. 여기 내가하고 싶은 것은 과부하를 구현하는 것입니다. 그러나 컴파일러는 d.speak (3)이 잘못되었음을 보여줍니다.자바에서 상속 할 때 오버로드 오류가 발생합니까?
나는 개가 동물을 물려 받았다고 생각한다. 그래서 speak() 함수가 있습니다. 그리고 과부하에 speak (int)를 추가합니다. 내가 왜 틀린거야? 고마워.
따라서 다형성을 구현하려면 우선 상속 트리에 동일한 서명이 있는지 확인해야합니다. 아니면 적절한 데이터 유형으로 '변환'해야합니까? – AlexWei
@AlexWei 다형성은 동일한 서명과 함께 적용됩니다. 따라서 메서드 인터페이스 (이름, 반환 형식 및 매개 변수 이름 및 형식으로 제공)가 계층 구조의 클래스에서 동일하면 기본 클래스 (이 경우 Animal)에 대한 포인터에서 해당 메서드를 호출하면 런타임에서 인스턴스의 실제 클래스 (이 경우 Dog)에서 메소드를 호출하십시오. –