2013-09-24 4 views
1

Я знаю разницу между всеми модификаторами доступа в Java. Тем не менее, кто-то задал мне очень интересный вопрос, на который я изо всех сил пытался найти ответ: в чем разница между интерфейсом private и интерфейсом public на Java, в частности, , как он используется как член класса? Любая помощь будет принята с благодарностью.В чем разница между открытым и частным интерфейсом в Java

+2

Это аналогично разнице между '' private' и public' класса. – arshajii

+0

Что такое среднее? – blackpanther

+0

[Эта ссылка] (http://www.objectmentor.com/resources/articles/privateInterface.pdf) может быть очень полезна. – Maroun

ответ

2

Я считаю, что мы все знаем об использовании public interface, поэтому я бы упомянул здесь пункт private/protected interface.

Interfaces могут быть членами определений классов и могут быть объявлены private или protected.

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 Я узнаю что-то новое каждый день. Не могу сказать, что я когда-либо думал о том, чтобы ввести «интерфейс» в качестве члена класса. –

+0

Пожалуйста, не злоупотребляйте встроенным «кодом» с обратными тиками. – arshajii

+0

Встроенный код через обратные ссылки должен * только * использоваться для кода. – arshajii

0

В public, private и 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 

общественность: Если тип интерфейса объявляется публично, то он может получить доступ к любому коду.

защищенный/закрытый: Модификаторы доступа, защищенные и закрытые, относятся только к интерфейсам-участницам в пределах непосредственно объявляемого объявления класса. A member interface - это интерфейс, декларация которого непосредственно заключена в другое объявление класса или интерфейса.

статический: Модификатор доступа static относится только к интерфейсам участников, а не к интерфейсам верхнего уровня.

аннотация: Каждый интерфейс неявно abstract. Этот модификатор устарел и не должен использоваться в новых программах.

strictfp: Эффект модификатора strictfp, чтобы сделать все терки или двойные выражения внутри описания интерфейса будет явно FP-strict.

Ref: Java Language and Virtual Machine Specifications

Смежные вопросы