容易混淆的java 动态类型 与 静态类型 在这里将会得到易于理解的解释
动态方法选择和类型检查谜题
Java中每个变量都有一个静态变量类型,这是在声明变量是定义的,并在编译中进行检查。
其实每个变量还有一个动态变量类型,这是在实例化变量时指定,在运行中进行检查。
- 当 Java 检查应调用哪个方法时,它会根据
静态类型来选择,并调用与参数类型匹配的方法。 - 当 Java 运行一个被重写的方法时,它会在其
动态类型中搜索适当的方法签名并运行它。
以下是一个演示动态方法选择和类型检查的示例:
1 | class Animal { |
编译时类型检查和表达式
表达式具有编译时类型:
1
2
3
4
5SLList<Integer> sl = new VengefulSLList<Integer>();
//VengefulSLList 是 SLList 的一种,因此允许赋值。
VengefulSLList<Integer> vsl = new SLList<Integer>();
//这个则不被允许,SLList 不一定是 VengefulSLLis方法调用的编译时类型与其声明类型相同。
类型转换
Java提供了一种强大的类型转换机制,可以让编译器忽略某些类型检查,允许开发者显式地将一种类型转换为另一种类型。然而,这种转换有时可能会带来风险。
Does not actually change anything: sunglasses don’t make the world dark.
实际上并没有改变任何东西:太阳镜不会让世界变暗。
1 | public class PrimitiveCasting { |