In addition to signals, there can also be tasks and functions inside the interface. This lets you create tasks specific to that interface. Interfaces can be parameterized. In the previous example, data1 and data2 were both 10-bit vectors, but you can modify those interfaces to be any size depending on a parameter that is set.