在父类和子类里,可以定义相同名称的成员变量和方法,而在引用时,也将按照句柄类型来确定作用域。
示例
父类basic_test
class basic_test;
int def = 100;
int fin;
task test(stm_ini ini);
$display("basic_test::test");
endtask
function new(int val);
...
endfunction
endclass
子类test_wr
class test_wr extends basic_test;
int def = 200;
function new();
super.new(def);
$display("test_wr::new");
$display("test_wr::super.def = %0d", super.def);
$display("test_wr::this.def = %0d", this.def);
endfunction
...
endclass
调用父类和子类同名变量
module tb;
...
basic_test t;
tets_wr wr;
initial begin
wr = new();
t = wr; //子类赋值给父类
$display("wr.def = %0d", wr.def); //200
$display("t.def = %0d", t.def); //100
调用父类和子类同名变量def时,子类对象wr里面def的值为200,父类里面def的值为100
此时,因为子类对象wr继承了父类,所以wr可以访问全部的变量,即可以访问父类中def变量,也可以访问子类中def变量。如果子类句柄赋值给父类句柄以后,父类的句柄虽然指向的是一个子类的对象,但是只能访问这个子类对象中属于它类型的那一部分,也就是说t这个类型是父类的,因此通过t也只能访问这个子类对象里面属于继承于父类里面那一部分的成员变量和方法,所以t.def的值时父类里面def的值。