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

时间:2011-05-09 04:27:38

标签: java class interface

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

class A {
   interface B {}
}

interface D {
   class E {}
} 

5 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:5)

组织。

在接口中指定一个类将该类直接绑定到该接口 - 使用该接口的客户端将可以访问该类及其提供的所有功能。

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

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

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

答案 2 :(得分: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可用于VehicleService,我们不会在其他任何地方使用它。

  1. 要提供接口的默认实现,我们可以在接口
  2. 中定义一个类

    界面

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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