Интерфейс обеспечивает базу для конкретных классов. Он определяет контракт, который должен быть полностью заполнен реализующими классами. Так что его можно использовать полностью в случае, если вам нужен полиморфизм. например, если у вас есть несколько классов и интерфейс, например:
interface Doctor{ void doCheckUp(); }
class HumanDoctor implements doctor{
public void doCheckUp(){
//checkup code here }
public doHumanRelatedStuff(){ // Human Related Stuff }
}
class AnimalDoctor implements doctor{ public void doCheckUp(){ //checkup code here }
public doAnimalRelatedStuff(){ // Animal Related Stuff } }
Здесь, если вы хотите выполнить какую-то общую работу, которая является общей для обоих врачей (doCheckUp), вы должны использовать интерфейс, подобный
public void routineChecup(Doctor d){
d.doCheckUp();
}
В этом случае, независимо от того, какой объект вы передаете, он вызовет метод doCheckUp соответствующего объекта.
Но ваш конкретный класс может иметь несколько дополнительных методов, и если вы хотите использовать эти методы, вам нужно вызывать методы, используя соответствующие конкретные объекты класса.
Итак, если вы хотите использовать общие общие методы, вы должны использовать экземпляр интерфейса.