web-dev-qa-db-fra.com

A quoi sert de créer une classe dans une interface et une interface dans une classe?

Je veux savoir quel est le besoin de placer une classe dans une interface et une interface dans une classe?

class A {
   interface B {}
}

interface D {
   class E {}
} 
25
Bhadri

Je copie et je colle à partir d’un lien (je l’ai fait plus tôt et partage avec vous). Peut-être que cela peut vous aider un peu.

1)

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

Dans l'interface ci-dessus, vous liez fortement le type de rôle à l'interface de l'employé (employee.Role). 2) Avec une classe statique à l'intérieur d'une interface, vous avez la possibilité de raccourcir un fragment de programmation commun: Vérifier si un objet est une instance d'une interface et, le cas échéant, appeler une méthode de cette interface. Regardez cet exemple:

  public interface Printable {
    void print();

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

Maintenant au lieu de faire ceci:

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

Tu peux écrire:

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

Organisation.

La spécification d'une classe à l'intérieur d'une interface lie cette classe directement à cette interface. Les clients qui utilisent cette interface auront accès à cette classe et à toutes les fonctionnalités qu'elle fournit.

J'ai vu le modèle d'une classe dans une interface uniquement dans Java 1.4 et versions ultérieures pour fournir un type énuméré à utiliser avec l'interface - l'interface ne pouvant utiliser que la classe et la classe pouvant être protégée, les clients qui l'utilisent l'interface ne peut accepter que les instances de la classe définie dans l'interface en tant que valeurs énumérées. Ce n'est que le seul exemple que je puisse trouver - je suis sûr que d'autres existent, mais il est rare que je voie une classe à l'intérieur d'une interface utilisée.

Pour le cas retourné, c'est toujours l'organisation. Spécifier une interface à l'intérieur d'une classe signifie que seule cette classe doit utiliser l'interface. Le fait que d'autres classes et interfaces puissent toujours utiliser cette interface, en fonction de son niveau d'accès, n'est pas le problème - l'organisation documente l'intention de l'interface - à utiliser uniquement dans la classe qui la contient.

S'il est utile en dehors de cette classe, il devrait être déplacé correctement vers son propre type. Ainsi, ces deux utilisations sont rares, mais leur utilisation consiste principalement à organiser le code et à documenter son intention directement via la syntaxe Java.

5
MetroidFan2002

Si la fonctionnalité d'une classe est étroitement associée à une interface et que nous n'utiliserons cette classe nulle part, nous pouvons définir une classe à l'intérieur d'une interface.

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;
      }

   }
}

Dans la cas ci-dessus, la classe de véhicule est disponible pour VehicleService et nous ne l'utilisons nulle part ailleurs.

  1. Pour fournir l'implémentation par défaut d'une interface, nous pouvons définir une classe à l'intérieur d'une interface.

Interface

package PracticeTest;

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

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

Classe d'implémentation

 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();
    }
 }
3
Shweta Tyagi

Si une fonctionnalité de classe est étroitement associée à une interface dans cette situation, nous déclarons une classe à l'intérieur d'une interface.

Il est également utile de fournir une implémentation par défaut de la méthode abstraite dans l’interface.

1
Pawan kumar

la création de classes à l’intérieur de l’interface permet au programmeur d’avoir des restrictions sur la classe, c’est-à-dire que la classe interne n’est accessible que si nous implémentons cette interface.

0
kalyani chaudhari