ここは私の質問です。私はそれに抽象メソッドを持つスーパークラスを持っています。私がメインに行って、このコードサブクラスオブジェクトから抽象メソッドを呼び出す
Base b = new sub();
b.foo();
をしようとすると
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!");
}
}
ので、私は、エラーとメッセージ何を持っていない私の画面上に表示されます。私の前提は、コンパイラがbオブジェクトを見て、それをBaseオブジェクトとして見て、それがBaseオブジェクトからfooに行き、その後に実装がないと見て、それが子からfooをチェックアウトし、fooがそこに実装されているので、メッセージを表示します。私は正しい?
ベースをコンパイルしている間、ランタイムオブジェクトはサブオブジェクトです。メソッドは実行時オブジェクトに対して呼び出されます。 –
[抽象クラスのドキュメント](http://stackoverflow.com/documentation/java/87/inheritance/397/abstract-classes#t=20160916155332004042)を参照してください。 – Jonathan
皆さん、ありがとうございます。したがって、ランタイムオブジェクトメソッドfooは、基本クラスメソッドfooではなく呼び出されるため、コンパイラはそれについて不平を言いません。 – MohsenFM