Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java-интерфейс

Интерфейс Java

В этом уроке мы узнаем об интерфейсах Java. Мы подробно узнаем, как реализовывать интерфейсы и когда их использовать, с помощью примеров.

Интерфейс — это полностью абстрактный класс. Он включает в себя группу абстрактных методов (методы без тела).

Мы используем interface ключевое слово для создания интерфейса на Java. Например,

interface Language {
  public void getType();

  public void getVersion();
}

Здесь

<час>

Реализация интерфейса

Как и абстрактные классы, мы не можем создавать объекты интерфейсов.

Чтобы использовать интерфейс, другие классы должны его реализовать. Мы используем implements ключевое слово для реализации интерфейса.

Пример 1:Интерфейс Java

interface Polygon {
  void getArea(int length, int breadth);
}

// implement the Polygon interface
class Rectangle implements Polygon {

  // implementation of abstract method
  public void getArea(int length, int breadth) {
    System.out.println("The area of the rectangle is " + (length * breadth));
  }
}

class Main {
  public static void main(String[] args) {
    Rectangle r1 = new Rectangle();
    r1.getArea(5, 6);
  }
}

Вывод

The area of the rectangle is 30

В приведенном выше примере мы создали интерфейс с именем Polygon. . Интерфейс содержит абстрактный метод getArea() .

Здесь Прямоугольник класс реализует Polygon . И обеспечивает реализацию getArea() метод.

<час>

Пример 2:Интерфейс Java

// create an interface
interface Language {
  void getName(String name);
}

// class implements interface
class ProgrammingLanguage implements Language {

  // implementation of abstract method
  public void getName(String name) {
    System.out.println("Programming Language: " + name);
  }
}

class Main {
  public static void main(String[] args) {
    ProgrammingLanguage language = new ProgrammingLanguage();
    language.getName("Java");
  }
}

Вывод

Programming Language: Java

В приведенном выше примере мы создали интерфейс с именем Language. . Интерфейс включает абстрактный метод getName() .

Здесь Язык программирования класс реализует интерфейс и обеспечивает реализацию метода.

<час>

Реализация нескольких интерфейсов

В Java класс также может реализовывать несколько интерфейсов. Например,

interface A {
  // members of A
}

interface B {
  // members of B
}

class C implements A, B {
  // abstract members of A
  // abstract members of B
}
<час>

Расширение интерфейса

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

interface Line {
  // members of Line interface
}

// extending interface
interface Polygon extends Line {
  // members of Polygon interface
  // members of Line interface
}

Здесь Многоугольник интерфейс расширяет Line интерфейс. Теперь, если какой-либо класс реализует Polygon , он должен предоставлять реализации для всех абстрактных методов как Line и Многоугольник .

<час>

Расширение нескольких интерфейсов

Интерфейс может расширять несколько интерфейсов. Например,

interface A {
   ...
}
interface B {
   ... 
}

interface C extends A, B {
   ...
}
<час>

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

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

Примечание :все методы внутри интерфейса неявно public и все поля неявно public static final . Например,

interface Language {
  
  // by default public static final
  String type = "programming language";

  // by default public
  void getName();
}
<час>

методы по умолчанию в интерфейсах Java

С выпуском Java 8 теперь мы можем добавлять методы с реализацией внутри интерфейса. Эти методы называются методами по умолчанию.

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

public default void getSides() {
   // body of getSides()
}

Почему методы по умолчанию?

Давайте рассмотрим сценарий, чтобы понять, почему в Java появились методы по умолчанию.

Предположим, нам нужно добавить новый метод в интерфейс.

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

Если этот интерфейс реализовывало большое количество классов, нам необходимо отслеживать все эти классы и вносить в них изменения. Это не только утомительно, но и чревато ошибками.

Чтобы решить эту проблему, в Java были введены методы по умолчанию. Методы по умолчанию наследуются как обычные методы.

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

<час>

Пример:метод по умолчанию в интерфейсе Java

interface Polygon {
  void getArea();

  // default method 
  default void getSides() {
    System.out.println("I can get sides of a polygon.");
  }
}

// implements the interface
class Rectangle implements Polygon {
  public void getArea() {
    int length = 6;
    int breadth = 5;
    int area = length * breadth;
    System.out.println("The area of the rectangle is " + area);
  }

  // overrides the getSides()
  public void getSides() {
    System.out.println("I have 4 sides.");
  }
}

// implements the interface
class Square implements Polygon {
  public void getArea() {
    int length = 5;
    int area = length * length;
    System.out.println("The area of the square is " + area);
  }
}

class Main {
  public static void main(String[] args) {

    // create an object of Rectangle
    Rectangle r1 = new Rectangle();
    r1.getArea();
    r1.getSides();

    // create an object of Square
    Square s1 = new Square();
    s1.getArea();
    s1.getSides();
  }
}

Вывод

The area of the rectangle is 30
I have 4 sides.
The area of the square is 25
I can get sides of a polygon.

В приведенном выше примере мы создали интерфейс с именем Polygon. . Он имеет метод по умолчанию getSides() и абстрактный метод getArea() .

Здесь мы создали два класса Rectangle. и Квадрат которые реализуют Polygon .

Прямоугольник класс обеспечивает реализацию getArea() метод и переопределяет getSides() метод. Однако Квадрат класс обеспечивает только реализацию getArea() метод.

Теперь при вызове getSides() метод с использованием Rectangle объект, вызывается переопределенный метод. Однако в случае с Квадратом объект, вызывается метод по умолчанию.

<час>

частные и статические методы в интерфейсе

В Java 8 также добавлена ​​еще одна функция, позволяющая включать статические методы внутри интерфейса.

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

// create an interface
interface Polygon {
  staticMethod(){..}
}

// access static method
Polygon.staticMethod();

Примечание :с выпуском Java 9 частные методы также поддерживаются в интерфейсах.

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

<час>

Практический пример интерфейса

Давайте посмотрим на более практичный пример интерфейса Java.

// To use the sqrt function
import java.lang.Math;

interface  Polygon {
   void getArea();
  
 // calculate the perimeter of a Polygon
   default void getPerimeter(int... sides) {
      int perimeter = 0;
      for (int side: sides) {
         perimeter += side;
      }

   System.out.println("Perimeter: " + perimeter);
   }
}

class Triangle implements Polygon {
   private int a, b, c;
   private double s, area;

// initializing sides of a triangle
   Triangle(int a, int b, int c) {
      this.a = a;
      this.b = b;
      this.c = c;
      s = 0;
   }

// calculate the area of a triangle
   public void getArea() {
      s = (double) (a + b + c)/2;
      area = Math.sqrt(s*(s-a)*(s-b)*(s-c));
      System.out.println("Area: " + area);
   }
}

class Main {
   public static void main(String[] args) {
      Triangle t1 = new Triangle(2, 3, 4);

// calls the method of the Triangle class
      t1.getArea();

// calls the method of Polygon
      t1.getPerimeter(2, 3, 4);
   }
}

Вывод

Area: 2.9047375096555625
Perimeter: 9

В приведенной выше программе мы создали интерфейс с именем Polygon. . Он включает метод по умолчанию getPerimeter() и абстрактный метод getArea() .

Таким же образом мы можем вычислить периметр всех многоугольников, поэтому мы реализовали тело getPerimeter(). в многоугольнике .

Теперь все полигоны, реализующие Polygon можно использовать getPerimeter() для расчета периметра.

Однако правило вычисления площади для разных полигонов различно. Следовательно, getArea() включен без реализации.

Любой класс, реализующий Polygon должен предоставить реализацию getArea() .


java

  1. С# интерфейс
  2. Операторы Java
  3. Java-комментарии
  4. Java-проба с ресурсами
  5. Java-аннотации
  6. Интерфейс Java NavigableSet
  7. Лямбда-выражения Java
  8. Интерфейс против абстрактного класса в Java:в чем разница?
  9. Java — Интерфейсы
  10. Java 9 — методы частного интерфейса