Подтвердить что ты не робот

Каково фактическое использование интерфейса в java?

Возможные дубликаты:
Абстрактный класс и класс интерфейса?
Java: интерфейс/абстрактные классы/абстрактный метод

В Java любое использование интерфейса выполняется абстрактным классом. Я знаю одно преимущество интерфейсов в том, что если мы реализуем интерфейс, мы также можем расширить другой класс. Есть ли другое использование или преимущество интерфейса в Java?

4b9b3361

Ответ 1

Что вам нравится: тысячи абстрактных методов в одном абстрактном классе и наследуют этот класс ИЛИ делают так много интерфейсов для конкретных абстрактных методов и используют только те, которые вам нужны, наследуя как можно больше интерфейсов...

abstract class A
{
 //thousands of abstract method();
 abstract methodA();
 abstract methodB();
 abstract methodC();
}

//OR
interface ForOnlymethodA
{
 void methodA();
}
interface FormethodBandmethodC
{
 void methodB();
 void methodC();
}

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

Ответ 2

Интерфейсы позволяют использовать классы в разных иерархиях, полиморфно.

Например, скажем, у вас есть следующий интерфейс:

public interface Movable {
    void move();
}

Любое количество классов по иерархиям классов может реализовать Movable по-своему, но все равно будет использоваться некоторым вызывающим абонентом единообразным способом.

Итак, если у вас есть следующие два класса:

public class Car extends Vehicle implements Movable {
    public void move() {
       //implement move, vroom, vroom!
    }
}

public class Horse extends Animal implements Movable {
    public void move() {
       //implement move, neigh!
    }
}

С точки зрения вызывающего, это просто Movable

Movable movable = ...;
movable.move();  //who am I?

Надеюсь, это поможет.

Ответ 3

Несколько интерфейсов могут быть реализованы, но может быть расширен только один класс. Полностью абстрактный класс очень похож на интерфейс, за исключением того, что абстрактный класс может содержать переменные.

Это действительно зависит от того, что вам нужно. С++ позволяет вам расширять столько классов, которые вам нужны, и это превращается в катастрофу. Хорошая вещь о наличии только одного суперкласса заключается в том, что есть только один другой набор реализаций, о котором вам нужно беспокоиться (даже если родитель имеет родителя, родительская конкретная комбинация становится вашим родителем...)

Интерфейсы позволяют одному объекту играть много ролей, но они не позволяют повторное использование кода.

Это действительно упростить мышление о наследовании. На балансе, я думаю, они правильно поняли.

Ответ 4

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

Это связано с "единственным inheritance "ограничением для иерархии классов и "закрытых типов". Я буду держать язык на подтипа полиморфизма и его реализации Java; -)

Существуют и другие решения этой проблемы, такие как динамическая типизация, структурная типизация, множественное наследование и характеристики и т.д. Каждый подход имеет преимущества и недостатки. Интерфейсы были только тем подходом, который принимала Java.

Ответ 5

Интерфейс Java  - предоставляет data encapsulation, что означает, что реализация методов не может быть видна. Класс, который расширяет этот интерфейс, должен реализовать все объявленные в нем методы.

Дополнительная информация: ответ вики

Ответ 6

Преимущества над абстрактным классом? за исключением того факта, что вы можете реализовать несколько интерфейсов, но расширить только один (абстрактный или нет) класс, он аналогичен абстрактному классу, что все его методы являются абстрактными и общедоступными.