Remember, optional methods exist because you can provide sensible default behavior without them. In the above example it seems fair to make Printable things return true from canPrint() by default, because if someone wants to write an authentication layer for specific things they can implement their own version.