class packet;
integer i = 0;
function new();
i = 2;
endfunction
function shift();
i = i<<1;
endfunction
endclass
class linkpacket extends packet;
//这个i与他父类中的i不一样,(域不同)
//如果子类父类存在同名变量,则优先搜索子类域中的变量
integer i = 3;
//new函数会间接调用父类new
//注 这里如果父类的new函数与子类的new函数,都定义了参数,则子类必需调用super.new(参数);来继承父类
function new();
i = 3;
endfunction
function shift();//与new函数不同,自己定义的函数不会间接调用shift
super.shift();
//这可以加super继承父类,如果不加,则不会继承父类
// 注 这里虽然调用了父类的方法,但这里的i是子类域中的i,因此父类中的shift并没有对这个i起作用,
//因此,子类中的变量尽量不要与父类中的变量同名,以免混淆
//万一出现子类父类同名变量则会导致无法获取父类的这个同名变量
i = i<<2;
endfunction
endclass
module tb;
initial begin
packet p = new();
linkpacket lp = new();
$display(" p.i = %d",p.i);
$display("lp.i = %d",lp.i);
p.shift();
$display("after shifut p.i = %d",p.i);
lp.shift();
$display("after shifut lp.i = %d",lp.i);
end
endmodule