結論: 上向きの変換では、親クラスの参照はサブクラスのオブジェクトを指し、この参照オブジェクトは、メソッドを呼び出すときにサブクラスのメソッドを呼び出すことができません。コンパイルされた型は "の左側の要素であるためです。 =記号」で、コンパイル済みの型はコンパイル段階にあります。 OK、cry() メソッドは親クラスに存在しないため、サブクラスに継承できないため、それ自体で定義することしかできません。「=」の右側が実行型なのでeat()メソッドが呼び出せ、実行型はサブクラス上(親クラス)からメソッドを探すため、ドッグリファレンスはeat( ) および sleep() メソッド。コードに直接移動します。
public class Animal {
public void eat(){
System.out.println("吃xx");
}
public void sleep(){
System.out.println("睡觉");
}
}
public class Dog extends Animal{
@Override
public void eat() {
System.out.println("吃肉");
}
public void cry(){//这个时子类特有的方法
System.out.println("狗叫");
}
}
public class Test {
public static void main(String[] args) {
Animal dog = new Dog();
dog.eat();
dog.sleep();
//dog.cry(); 这个会报错
}
}
操作の結果は次のとおりです。
肉を
食べる