2014-10-05 4 views
-1

Я вижу людей, создающих экземпляр некоторого класса и назначающих его ссылочной переменной интерфейса типа, реализуемой классом.Интерфейс как тип в java

interface A { 
    void display(); 
} 
public class InterfaceObject implements A { 
    public void display(){ 
    System.out.println("show this.."); 
    } 
    public static void main(String[] args) { 

    A aObj = new InterfaceObject(); 
    aObj.display();//OUTOUT:show this.. 

    InterfaceObject bObj = new InterfaceObject(); 
    bObj.display();//OUTOUT:show this.. 
} 
} 

Здесь объект aObj является объектом интерфейса и объект BOBJ является прямым экземпляром класса, реализующего интерфейс. Однако отображение вызова() через оба объекта дает то же результат.
ВОПРОС: В чем преимущество создания объекта интерфейса (эталонная переменная типа интерфейса)? это только добавляет больше путаницы в код? Конечно, этого не произойдет.

+0

Обычно это значит, что вы можете создать 'class OtherInterfaceObject реализует A', который делает что-то другое при вызове' display() '. – markspace

+0

_Что такое преимущество создания объекта интерфейса? _ Вы не можете создать объект интерфейса. Вы можете определить ссылочную переменную, тип которой является интерфейсом. – Voicu

+0

Интерфейсы обеспечивают свободу от наследования и иерархии классов. Используй их. – user2864740

ответ

0

Классическая иллюстрация интерфейса (или абстрактного типа) - это форма. Предположим, вы пишете программу, в которой отображаются фигуры - треугольники, прямоугольники, круги и т. Д. Все они могут реализовывать определенные методы, которые позволяют отображать их на экране - скажем, метод отображения (экрана) - так, чтобы каждая форма знает, как это сделать для себя.

Но, реализуя интерфейс «shape» и обрабатывая объекты как фигуры, формы обработки кода не должны знать об обработке каждого типа фигуры, только о тех методах, которые имеют общую форму. Это преимущество. Дисплейная часть программы может иметь набор из них и иметь дело с ними, не зная их индивидуальных характеристик.

Этот вид общности применим ко многим ситуациям.

+0

Форма может быть классом и все еще показывать пример - так зачем использовать интерфейсы? – user2864740

+1

Java не имеет множественного наследования, поэтому создание интерфейса Shape оставляет класс реализации (Traiangle, Rectangle и т. Д.) Свободным для расширения другого класса и по-прежнему реализует Shape. Если Shape был классом, класс реализации должен был бы расширять Shape и не мог распространять какой-либо другой класс. Интерфейс также создает более слабую связь. Другие классы, связанные с реализациями Shape, не должны знать, что такое конкретный класс разработчика. – GreyBeardedGeek

+0

Хорошая точка @GreyBeardedGeek – user3366706

Смежные вопросы