As mentioned earlier, it's because you declared the variable but never instantiated it, meaning it does not exsist yet, it's just a placeholder for the type defined at the declaration, what you need to do is
Leen x; // declare the variable
x = new implementationClass(); // instantiate the variable
x.PrintName(); // then you functions
Now since the interface is used, all functions on the interface is available, but the code will attempt to use the implementation form whatever class implemented the interface and was intantiated
Why is this smart ? well say you lave a List<Leen>
then all elements in the list can use the functions on Leen
regardless of what implementation of Leen
they were created with