2011-05-09 34 views

回答

21

這個我從一些鏈接複製和粘貼(我先前做的,並與您分享) 可以是能幫助你一點。

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

組織。

在接口中指定一個類將該類直接綁定到該接口 - 使用該接口的客戶端將有權訪問該類及其提供的所有功能。

我已經看到了接口內部類的模式,實際上只在Java 1.4及更低版本中提供了一個枚舉類型以便與接口一起使用 - 因爲接口只能使用類,而類可以受保護,使用該接口的客戶端只能接受在接口中定義的類的實例作爲枚舉值。這只是我能想出的唯一例子 - 我確信有其他人存在,但我很少看到使用的接口中有類。

對於翻轉的情況,它仍然是組織。指定類內的接口表示只有該類應該使用該接口。其他類和接口仍然可以使用該接口(取決於其訪問級別),這不是重點 - 組織將接口的意圖記錄下來 - 僅在包含它的類中使用。

如果它在該類之外有用,它應該適當地移動到它自己的類型。所以,這兩種用法都很少見,但它們的用途主要是通過Java語法直接組織代碼並記錄它的意圖。

+0

我認爲一些代碼片段可能會有所幫助。 – 2011-05-09 17:19:58

+0

我認爲在http://stackoverflow.com/a/10481539/1083704 – Val 2013-04-17 13:42:15

1

如果在這種情況下任何類的功能都與任何接口緊密關聯,我們會在接口中聲明一個類。

有些時候在接口中提供抽象方法的默認實現也很有用。

0

在接口中創建類允許程序員對類有限制,即只有在實現該接口時才能訪問內部類。

+0

中給出了一個例子,它不是真的,我們可以在不實現的情況下訪問內部類 - 「InterfaceName.ClassName a = new InterfaceName.ClassName( ); a.print(10);' – 2017-03-21 05:56:22

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,我們不在其他地方使用它。

  • 提供一個接口的默認實現,我們可以定義一個接口
  • 接口

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