여기 내 질문입니다. 나는 그것에 추상적 인 메소드를 가진 수퍼 클래스를 가지고있다.하위 클래스 개체에서 추상 메서드 호출
public abstract class Base{
public abstract Boolean foo();
}
public class sub extends Base{
@Override
public Boolean foo(){
System.out.printLn("This is foo in the sub class!");
}
}
그래서 메인에 가서이 코드
Base b = new sub();
b.foo();
나는 오류를 가지고하지 않으며 메시지가 내 화면에 표시를하려고하면. 내 가정은 컴파일러가 b 객체를보고 기본 객체로보고 기본 객체의 foo로 이동 한 후 구현이 없다는 것을 확인한 후 자식의 foo를 확인한 다음 foo 메소드를 봅니다. 거기 구현 그래서 그것은 메시지를 보여줍니다. 내가 맞습니까?
자료를 컴파일하는 동안 런타임 오브젝트는 하위입니다. 메소드는 런타임 객체에서 호출됩니다. –
[추상 클래스 문서] (http://stackoverflow.com/documentation/java/87/inheritance/397/abstract-classes#t=20160916155332004042)를 참조하십시오. – Jonathan
여러분, 고맙습니다. 그래서 런타임 객체 메소드 foo가 기본 클래스 메소드 인 foo보다 호출되기 때문에 컴파일러는 그것에 대해 불평하지 않습니다. – MohsenFM