How to write a function which returns itself in an extend class?

class input_tran;
  reg [7:0] a, b, c, d;

  function new(reg [7:0] ia = 0, reg [7:0] ib = 0, reg [7:0] ic = 0, reg [7:0] id = 0);
    a = ia; b = ib; c = ic; d = id;
  endfunction : new

  function void copy(input_tran t_);
    a = t_.a;
    b = t_.b;
    c = t_.c;
    d = t_.d;
  endfunction

  function input_tran clone;
    input_tran t = new;
    t.copy(this);
    return t;
  endfunction : clone
endclass : input_tran

class inputnop_tran extends input_tran;
  bit nop;

  function new(reg [7:0] ia = 0, reg [7:0] ib = 0, reg [7:0] ic = 0, reg [7:0] id = 0, bit inop = 0);
    super.new(ia, ib, ic, id);
    nop = inop;
  endfunction : new

  function void copy(inputnop_tran t_);
    super.copy(t_);
    nop = t_.nop;
  endfunction

  function inputnop_tran clone;
    inputnop_tran t = new;
    t.copy(this);
    return t;
  endfunction : clone
endclass : inputnop_tran