Да Это законно.
В вашем случае Dog должен расширять Animal:
abstract class Animal {}
class Dog extends Animal {}
То же самое верно для интерфейса (который является абстрактным по определению) и классакоторый реализует это:
interface Car {}
class Toyota implements Car {}