2013-09-24 118 views
1

我知道Java中所有訪問修飾符之間的區別。然而,有人問我一個非常有趣的問題,我試圖找到答案:在Java中,private接口和public接口之間有什麼區別,特別是它如何用作類成員?任何幫助將不勝感激。Java中的公共和私人接口有什麼區別

+2

它類似於一個'private'和'public'類之間的差別。 – arshajii

+0

類似是什麼意思? – blackpanther

+0

[此鏈接](http://www.objectmentor.com/resources/articles/privateInterface.pdf)可能非常有用。 – Maroun

回答

2

我相信大家都知道使用public interface,所以我在這裏提到點private/protected interface這裏。

Interfaces可以是類定義的成員,可以在那裏聲明爲privateprotected

public class Test { 

    private interface Sortable { 
    } 

    protected interface Searchable { 
    } 

} 

Example 1: -- Source

public class PrivateInterface { 
    private interface InnerInterface { 
      void f(); 
    } 

    private class InnerClass1 implements InnerInterface { 
      public void f() { 
       System.out.println("From InnerClass1"); 
      } 
    } 

    private class InnerClass2 implements InnerInterface { 
      public void f() { 
       System.out.println("From InnerClass2"); 
      } 
    } 

    public static void main(String[] args) { 
      PrivateInterface pi = new PrivateInterface(); 
      pi.new InnerClass1().f(); 
      pi.new InnerClass2().f(); 
    } 
} 

/* Output: 
From InnerClass1 
From InnerClass2 
*/ 

它的界面本身可以是包私有的,而不是方法 在裏面。您可以定義一個只能在其定義的包中使用(按名稱) 的接口,但其方法是公開的,如 所有接口方法。如果一個類實現了該接口,它定義的方法必須是公共的。這裏最關鍵的是它的接口類型是 ,在包之外是不可見的,而不是 方法。

+0

+1我每天都會學到新的東西。不能說我曾經想過把一個'interface'作爲一個類的成員。 –

+0

請不要濫用內嵌'代碼'與後面的勾號。 – arshajii

+0

通過反引號的內聯代碼只能*用於代碼。 – arshajii

0

接口上的publicprivate,並protected訪問修飾符意味着他們的意思是在一個類同樣的事情。我通常會在嵌套在類中的接口上看到使用這些修飾符。喜歡的東西this

//: interfaces/RandomWords.java 
// Implementing an interface to conform to a method. 
package interfaces; 

public class PrivateInterface { 
    private interface InnerInterface { 
     void f(); 
    } 

    private class InnerClass1 implements InnerInterface { 
     public void f() { 
      System.out.println("From InnerClass1"); 
     } 
    } 

    private class InnerClass2 implements InnerInterface { 
     public void f() { 
      System.out.println("From InnerClass2"); 
     } 
    } 

    public static void main(String[] args) { 
     PrivateInterface pi = new PrivateInterface(); 
     pi.new InnerClass1().f(); 
     pi.new InnerClass2().f(); 
    } 
} 
0

接口的聲明可能包括這些訪問修飾符:

public protected private abstract static strictfp 

市民:如果接口類型聲明爲public,那麼就可以通過任何代碼訪問。

protected/private: protected和private的訪問修飾符僅適用於直接包含的類聲明中的成員接口。 A member interface是一個接口,其聲明直接包含在另一個類或接口聲明中。

static:訪問修飾符static僅適用於成員接口,而不適用於頂層接口。

摘要:每個接口都是隱含的abstract。此修飾符已過時,不應在新程序中使用 。

strictfp:strictfp修改器的效果是使接口聲明中的所有float或double表達式 是明確FP-strict

編號:Java Language and Virtual Machine Specifications