O ISP (Inteface Segregation Principle) do Solid diz que "Uma classe não deve ser forçada a implementar interfaces e métodos que não irão utilizar", ou seja, devemos criar uma interface mais específica para colocarmos esse método que nem todas as classes que vão implementar a interface mais genérica precisam. Então por exemplo se tenho uma interface A com o método void fazerAlgo()
e uma classe B que não precisa desse método, se B implementa A então teríamos que implementar esse método e não fazer nada. Seguindo o ISP poderíamos criar uma inteface C que extend a A e retirar o fazerAlgo
da A. Sendo assim, B implementa A e não precisa sobrescrever fazerAlgo
. Porém, no java poderíamos declarar esse método como default e o padrão seria não fazer nada de fato: default void fazerAlgo() {}
. Dessa forma na classe B não precisaríamos implementar o método fazerAlgo()
, mesmo implementado a interface A e, em teoria, estaríamos respeitando o ISP. É correto dizer isso ou isso ou estaríamos "roubando" fazendo isso?