Modificadores de acesso

1 - Quando se trata de interfaces, implicitamente, seus atributos são públicos e abstratos. Nunca podem ser estáticos. Se esta afirmação está correta, porquê nunca podem ser estáticos?
2 - Assim como classes, interfaces não podem ser private ou protected. Somente public ou default, que é a mesma coisa SOMENTE EM CASOS DE INTERFACES. Diferente de casos em classes onde default é protected. Esta informação está correta?

Não pesquisei mas segundo minha base que estudei, métodos staticos são métodos que pertence a propia classe, pois lembre-se um metodo statico, ele pode ser chamado independente da instancia da classe, imagine você cria uma interface com um método statico, e o java tivesse que fica procurando em qual pacote esse método estaria ? seria um pouco contraditório, interfaces não implementam os metodos apenas manter sua assinatura.

A segunda questão voce se equivocou:

protected: seus membros são acessiveis a classes dos mesmo pacote ou através de herança.

default (padrão):A classe e/ou seus membros são acessíveis somente por classes do mesmo pacote, na sua declaração não é definido nenhum tipo de modificador, sendo este identificado pelo compilador.

public : uma declaração como public pode ser acessada de qualquer luga, ou de qualquer entidade que possa visualisa a classe que pertence.

Então os modicadores não são iguais em nenhum cenário, todos tem sua peculiaridade. Respondi com minha base nao pesquisei, cabe a você ler um pouco mais para saber distinguir as coisas.

Os tributos em interfaces são implicitamente public, static e final, ou seja, são constantes e devem ser inicializados logo na declaração.

interface MyInterface {
    int MY_CONSTANT = 123;

    // erro de compilação!
    // constante declarada, mas não inicializada.
    String MY_ANOTHER_CONSTANT;
}

Já os métodos em uma interface são públicos e sim, interfaces podem declarar métodos estáticos assim como métodos “default”.

Métodos com o modificador static funcionam da mesma forma que métodos estáticos em classes.

interface MyInterface {
    static void aStaticMethod() {
        /* do something */
    }
}

/* ... */

// invocação de um método estático em interfaces
MyInterface.aStaticMethod();

Já os métodos com o modificador default são métodos de instância que possuem uma implementação padrão.

interface MyInterface {
    // apenas intâncias de classes que implementam
    // esta interface podem invocar este método.
    default void aDefaultMethod() {
        /* do something */
    }
}

Métodos “default” são apenas uma conveniencia e nada impede que classes o sobreescrevam.

Um método que não é estático e nem “default” é implicitamente abstrato.

Tanto a declaração de classes quanto as de interfaces podem conter os modificadores de acesso public, protected ou private.

O que acontece é que há, básicamente, duas regiões onde se podem declará-las:

  1. Você pode declará-las dentro do corpo de uma outra classe ou interface. Neste caso são chamados de Classes aninhadas (Nested Classes) e interfaces aninhadas (Nested interfaces).
  2. Ou soltas no corpo do seu arquivo .java. São as Top level classes e Top level interfaces.

Top level classes e top level interfaces só podem conter o modificador public, caso contrário são consideradas como default, isto é, são visiveis apenas dentro do package em que foram declaradas, como citou nosso amigo @TEC.ER .

Já as Nested classes e nested interfaces declaradas dentro do corpo de uma classe podem conter qualquer um dos três modificadores de acesso.

Agora, quando são declaradas dentro do corpo de uma interface aí você não tem muito o que fazer, pois são implicitamente public e static.

Para tirar qualquer dúvida e/ou obter informação mais completa e confiável, visite a especificação da linguagem:

Charpter 9 - Interfaces | The Java® Language Specification

1 curtida