When extending or inheriting a few contracts, the order of inheritance matters.
I will explain below, with a proof of concept.
๐งต๐
There are numerous cases where you create a contract and you inherit implementation from another contract. Most of the time, you'll inherit a bunch of OpenZeppelin @openzeppelin implementations.
๐ For example, you want to create an ERC20 and will write something like this:
๐ฎ That is pretty obvious, you inherit the contract, take the implementation for all methods and keep moving forward. All's clear.
๐ง Things are interesting (or weird) when you inherit from multiple contracts.