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

Что такое использование класса внутри интерфейса и интерфейса внутри класса

Я хочу знать, в чем заключается необходимость размещения внутри интерфейса класса и интерфейса внутри класса?

class A {
   interface B {}
}

interface D {
   class E {}
} 
4b9b3361

Ответ 1

Это я копирую и вставляю из какой-то ссылки (я ранее делал и делился с вами) Может быть, это может помочь вам немного.

1)

interface employee{
class Role{
      public String rolename;
      public int roleId;
 }
Role getRole();
// other methods
 }

В приведенном выше интерфейсе вы сильно привязываете тип роли к интерфейсу сотрудника (employee.Role). 2) Со статическим классом внутри интерфейса у вас есть возможность сократить общий фрагмент программирования: проверка того, является ли объект экземпляром интерфейса и если он вызывает метод этого интерфейса. Посмотрите на этот пример:

  public interface Printable {
    void print();

    public static class Caller {
        public static void print(Object mightBePrintable) {
                if (mightBePrintable instanceof Printable) {
                        ((Printable) mightBePrintable).print();
                }
        }
    }
}

Теперь вместо этого:

  void genericPrintMethod(Object obj) {
    if (obj instanceof Printable) {
        ((Printable) obj).print();
    }
}

Вы можете написать:

   void genericPrintMethod(Object obj) {
         Printable.Caller.print(obj);
    }

Ответ 2

Организация.

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

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

Для перевернутого случая это все еще организация. Указание интерфейса внутри класса означает, что только этот класс должен использовать интерфейс. То, что другие классы и интерфейсы все еще могут использовать этот интерфейс, в зависимости от его уровня доступа, не является точкой - организация документирует намерение интерфейса - используется только в классе, который ее содержит.

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

Ответ 3

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

package PracticeTest;

public interface VehicleService {
   public void repair(Vehicle v);
   public class Vehicle{
      String vehicleModel;
      String vehicleNumber;
      public Vehicle(String vehicleModel, String vehicleNumber) {
      super();
      this.vehicleModel = vehicleModel;
      this.vehicleNumber = vehicleNumber;
      }

   }
}

В приведенном выше классе автомобиль доступен для VehicleService, и мы не используем его нигде.

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

Интерфейс

package PracticeTest;

public interface VehicleService {
public void repair();
public class DefaultVehicle implements VehicleService{

    @Override
    public void repair() {          
        System.out.println(" Default Repair");
    }
}

Класс реализации

 package PracticeTest;
 public class busRepair implements VehicleService{

   @Override
   public void repair() {
       System.out.println(" Bus Repair");
   }
   public static void main(String args[]){
        busRepair b = new busRepair();
        b.repair();
        DefaultVehicle d = new DefaultVehicle();
        d.repair();
    }
 }

Ответ 4

Если какая-либо функциональность класса тесно связана с любым интерфейсом в этой ситуации, мы объявляем класс внутри интерфейса.

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

Ответ 5

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