当超类引用指向子类对象时,是否会在java中发生隐式类型转换?

时间:2017-03-22 05:34:43

标签: java casting type-conversion

当超类引用指向子类对象时,执行期间是否将jvm类型转换为从sub到super类型的obejct并将其存储在引用变量中?

class Animal {

void bark() {
    System.out.println("Animal is barking");
  }
}

class Dog extends Animal{

void bark() {
    System.out.println("Dog is barking");
  }
}

public class DynamicBinding {

  public static void main(String[] args) {

    Animal a = new Dog();  //does implicit type casting happens at this line?
    a.bark();
  }

}

2 个答案:

答案 0 :(得分:0)

不,你在这里没有使用Dog的界面,你正在使用Animal的界面。这意味着,例如,如果Dog类有另一种方法,比如" run"动物类没有它,它不会在这里使用。

我想说的是:根本没有隐式或显式类型转换

答案 1 :(得分:0)

这是多态性的上传。这条线在下面说:

Animal a = new Dog();

您使用超类接口,但实现在子类中。也就是说,您可以在a引用上使用Animal类中的方法,但该方法的实现在Dog类中。