Types 分派和继承(静态与动态类型)

Types 分派和继承(静态与动态类型),types,compiler-construction,Types,Compiler Construction,因此,在我的编译器课程中,我们研究了代码 p : Point; p <- new ColorPoint; 这里p被声明为一个点,但被分配了一个ColorPoint对象,ColorPoint是Point的一个子类 老师说p有静态类型点,但它有动态类型点。他说这是因为编译器在编译时不知道p是一个色点,它只在运行时才知道。为什么呢?编译器难道看不到p被分配了一个ColorPoint对象吗?是的,在这种情况下它可以,但是如果你有 p : Point; p <- new ColorPoint

因此,在我的编译器课程中,我们研究了代码

p : Point;
p <- new ColorPoint;
这里p被声明为一个点,但被分配了一个ColorPoint对象,ColorPoint是Point的一个子类


老师说p有静态类型点,但它有动态类型点。他说这是因为编译器在编译时不知道p是一个色点,它只在运行时才知道。为什么呢?编译器难道看不到p被分配了一个ColorPoint对象吗?

是的,在这种情况下它可以,但是如果你有

p : Point;
p <- new ColorPoint;
// some statements that operate on p
p <- new BlackAndWhitePoint;
// some more statements that operate on p
通常,编译器无法推断使用变量的整个上下文,因此它必须按声明的类型进行