java编译类型和运行类型

1
2
3
4
5
6
7
8
9
10
11
12
13

class {

}

class Dog extends {
public void eat(){}
}

----------
Animal a = new Dog();
a.eat()
((Dog) a).run()//编译通过

如上的简易代码,编译时会报错。
编译类型:Animal a
运行类型:new Dog()

编译时,编译类型会根据a.eat()查找eat方法,找不到就会报错。
使用强制类型转换可以解决该问题,即
((Dog) a).run()