このコードについていくつか質問があります。
class superclass
{
void bark() {}
}
class subclass extends superclass
{
void bark() {}
public static void main(String[] args) {
superclass refvar = new subclass();
refvar.bark();
}
}
この場合、子がメソッドを持っているかどうかに関係なく、親がメソッドを持っている必要があるのはなぜですか? コンパイル時に参照変数はスーパークラス型であると言われたので、コンパイラはコンパイル時にスーパークラスでこのメソッドをチェックします。それは正確ですか?
コンパイラが を読み取るとき、
bark()
次の行先をどのように知るのでしょうか? 子メソッドがそれをオーバーライドすることは知っていますが、最初にスーパークラスのメソッドまたはサブクラスに行くことと、その理由を知りたいです。サブクラスがより広い範囲のアクセス修飾子を持つ必要があるのはなぜですか?