Рубрики
Без рубрики

Интерфейс на Java

Интерфейс на Java. Что такое интерфейс в java? Пример интерфейса Java, реализация интерфейса java, расширение интерфейса, абстракция в интерфейсах java.

Автор оригинала: Pankaj Kumar.

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

Интерфейс на Java

Интерфейс на java обеспечивает способ достижения абстракции . Интерфейс Java также используется для определения контракта для реализации подклассов.

Например, предположим, что мы хотим создать рисунок, состоящий из нескольких фигур. Здесь мы можем создать интерфейс Shape и определить все методы, которые будут реализованы различными типами объектов Shape. Для простоты мы можем сохранить только два метода – draw() для рисования фигуры и getArea () , который вернет область фигуры.

Пример интерфейса Java

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

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

package com.journaldev.design;

public interface Shape {

	//implicitly public, static and final
	public String LABLE="Shape";
	
	//interface methods are implicitly abstract and public
	void draw();
	
	double getArea();
}

Важные моменты, касающиеся интерфейса в Java

  1. интерфейс – это код, который используется для создания интерфейса на java.
  2. Мы не можем создать экземпляр интерфейса на java.
  3. Интерфейс обеспечивает абсолютную абстракцию, в последнем посте мы узнали о абстрактных классах в java для обеспечения абстракции, но абстрактные классы могут иметь реализации методов, а интерфейс-нет.
  4. Интерфейсы не могут иметь конструкторов, потому что мы не можем создавать их экземпляры, а интерфейсы не могут иметь метод с телом.
  5. По умолчанию любой атрибут интерфейса является общедоступным , статическим и окончательным , поэтому нам не нужно предоставлять модификаторы доступа к атрибутам, но если мы это сделаем, компилятор тоже не будет жаловаться на это.
  6. По умолчанию методы интерфейса неявно абстрактны и общедоступны , это имеет полный смысл, поскольку метод не имеет тела и поэтому подклассы могут обеспечить реализацию метода.
  7. Интерфейс не может расширить какой-либо класс, но он может расширить другой интерфейс. Форма открытого интерфейса расширяет клонируемую{} является примером интерфейса, расширяющего другой интерфейс. На самом деле java обеспечивает множественное наследование в интерфейсах, что означает, что интерфейс может расширять несколько интерфейсов.
  8. реализует ключевое слово используется классами для реализации интерфейса.
  9. Класс, реализующий интерфейс, должен обеспечивать реализацию всех своих методов, если только это не абстрактный класс. Например, мы можем реализовать вышеуказанный интерфейс в абстрактном классе следующим образом:

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

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

Пример Реализации интерфейса Java

Теперь давайте рассмотрим некоторую реализацию нашего интерфейса Shape на java.

Теперь давайте рассмотрим некоторую реализацию нашего интерфейса Shape на java.

package com.journaldev.design;

public class Circle implements Shape {

	private double radius;

	public Circle(double r){
		this.radius = r;
	}
	
	@Override
	public void draw() {
		System.out.println("Drawing Circle");
	}
	
	@Override
	public double getArea(){
		return Math.PI*this.radius*this.radius;
	}

	public double getRadius(){
		return this.radius;
	}
}

Обратите внимание, что класс Circle реализовал все методы, определенные в интерфейсе, и у него есть некоторые собственные методы, такие как getRadius() . Реализации интерфейса могут иметь несколько типов конструкторов. Давайте рассмотрим другую реализацию интерфейса для интерфейса формы.

Обратите внимание, что класс Circle реализовал все методы, определенные в интерфейсе, и у него есть некоторые собственные методы, такие как || getRadius() || . Реализации интерфейса могут иметь несколько типов конструкторов. Давайте рассмотрим другую реализацию интерфейса для интерфейса формы.

package com.journaldev.design;

public class Rectangle implements Shape {

	private double width;
	private double height;
	
	public Rectangle(double w, double h){
		this.width=w;
		this.height=h;
	}
	@Override
	public void draw() {
		System.out.println("Drawing Rectangle");
	}

	@Override
	public double getArea() {
		return this.height*this.width;
	}

}

Обратите внимание на использование аннотации переопределения, узнайте о аннотациях в java и почему мы всегда должны использовать аннотацию переопределения при переопределении метода в java .

Вот тестовая программа, показывающая, как кодировать с точки зрения интерфейсов, а не реализаций.

Вот тестовая программа, показывающая, как кодировать с точки зрения интерфейсов, а не реализаций.

package com.journaldev.design;

public class ShapeTest {

	public static void main(String[] args) {
		
		//programming for interfaces not implementation
		Shape shape = new Circle(10);
		
		shape.draw();
		System.out.println("Area="+shape.getArea());
		
		//switching from one implementation to another easily
		shape=new Rectangle(10,10);
		shape.draw();
		System.out.println("Area="+shape.getArea());
		}

}

Вывод приведенного выше примера программы java – интерфейса выглядит следующим образом:

Drawing Circle
Area=314.1592653589793
Drawing Rectangle
Area=100.0

Преимущества интерфейса Java

  1. Интерфейс предоставляет контракт для всех классов реализации, поэтому его полезно кодировать с точки зрения интерфейсов, потому что классы реализации не могут удалить методы, которые мы используем.
  2. Интерфейсы хороши как отправная точка для определения типа и создания иерархии верхнего уровня в нашем коде.
  3. Поскольку класс java может реализовывать несколько интерфейсов, в большинстве случаев лучше использовать интерфейсы в качестве суперкласса.

Недостатки интерфейса Java

Хотя интерфейсы дают много преимуществ, но у них есть и некоторые недостатки.

  1. Нам нужно очень тщательно выбирать методы интерфейса во время разработки нашего проекта, потому что мы не можем добавить или удалить какие-либо методы из интерфейса в более поздний момент времени, это приведет к ошибке компиляции для всех классов реализации. Иногда это приводит к тому, что в нашем коде появляется много интерфейсов, расширяющих базовый интерфейс, который становится трудно поддерживать.
  2. Если классы реализации имеют свои собственные методы, мы не можем использовать их непосредственно в нашем коде, потому что тип объекта-это интерфейс, в котором нет этих методов. Например, в приведенном выше коде мы получим ошибку компиляции для кода shape.getRadius() . Чтобы преодолеть это, мы можем использовать типизацию и использовать метод, подобный этому:

    Хотя типизация классов имеет свои недостатки.

Это все, что у меня есть для интерфейса на java. Поскольку мы часто используем интерфейс java, мы должны знать о его функциях. Убедитесь, что вы используете интерфейсы при проектировании системы и в качестве контракта между клиентом и подклассами, реализующими интерфейсы.

Обновление : Java 8 изменила определение интерфейсов с введением методов по умолчанию и реализацией статических методов. Для получения более подробной информации, пожалуйста, прочитайте Интерфейс Java 8 .