在类内部的接口和接口中创建类有什么用?

我想知道在类中放置一个类和在类中的接口需要什么?

class A { interface B {} } interface D { class E {} } 

这是我从一些链接复制和粘贴(我之前做过并与你分享)可能会对你有所帮助。

1)

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

在上面的界面中,您将Role类型强烈绑定到employee接口(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); } 

组织。

在接口内指定类将该类直接绑定到该接口 – 使用该接口的客户端将可以访问该类及其提供的所有function。

我已经在界面中看到了一个类的模式,实际上只在Java 1.4及更低版本中提供了一个枚举类型来与接口一起使用 – 因为接口只能使用该类,并且该类可以受到保护,使用的客户端接口只能接受接口中定义的类的实例作为枚举值。 这只是我能想到的唯一例子 – 我确定其他人存在,但我很少看到使用的接口内部的类。

对于翻转的案例,它仍然是组织。 在类中指定接口表示只有该类应该使用该接口。 其他类和接口仍然可以使用该接口,具体取决于其访问级别,不是组织记录接口的意图 – 仅在包含它的类中使用。

如果它在该类之外有用,则应该将其适当地移动到它自己的类型。 因此,这两种用途都很少见,但它们的用途主要是组织代码并直接通过Java语法记录其意图。

如果类的function与接口密切相关,并且我们不打算在任何地方使用该类,那么我们可以在接口内定义类。

 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可用于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(); } } 

如果任何类function与该情况下的任何接口紧密关联,我们在接口内声明一个类。

有时候在界面内提供抽象方法的默认实现也很有用。

在接口内部创建类允许程序员对类有限制,即只有在我们实现该接口时才能访问内部类。