Hi @HardlyCodeMan,
Your solution works, but there is no need to have the additional destroy function in HelloWorld. This is because you are only actually deploying a single contract which includes all the inherited functionality (from Ownable and Destroyable) and so what you’ve currently got is code duplication. Calling withdrawAll() as well as lightTheFuse() is also code duplication, because, before destroying the contract, selfdestruct() automatically transfers the contract balance to whichever address is passed to it as an argument (in our case msg.sender i.e. the owner), and so already includes the same functionality as the withdrawAll function, anyway.
To avoid the code duplication you can remove the destroy function from HelloWorld and change lightTheFuse() in Destroyable from internal to public visibility.
Also, have a look at this post — it explains how you can streamline the inheritance by having HelloWorld just inherit Destroyable. I think you’ll find it interesting