add virtual class protocol