一 问题引导
前面文章,实际还没有完全剖析完整代码。今天我们自己捋一遍。
源代码片段如下:
function void print_hungry(bird b_ptr);
b_ptr.hungry(); // 动态绑定到实际对象类型,使用virtual 关键字声明
b_ptr.hungry2(); // 静态绑定到声明类型(bird),静态绑定是因为没有被virtual 关键字声明
endfunction
完整代码如下:
而代码第74行,因为实参 bird_inst, 与 参数形参 bird b_ptr 属于同一类型,不需要做转换。
而第75行代码,因为实参为parrot_inst , 与 参数形参 bird b_ptr 不属于同一类型,需要做转换。
那么具体是向上转换,还是向下转换呢?
class Base;
string color = "red";
endclass
class Child extends Base; // Child 是子类
string size = "large"; // 子类