A essência da interface - Uma interface é uma classe abstrata especial que contém apenas a definição de constantes e métodos, mas não a implementação de variáveis e métodos.
As interfaces podem ter algumas coisas que as classes abstratas possuem. Se todos os métodos em uma classe abstrata são abstratos, nenhum método precisa ser implementado por esta classe abstrata, e todas as variáveis nesta classe abstrata são variáveis estáticas, são todas variáveis que não podem. ser alterado (final). Nesse caso, tal classe abstrata pode ser definida como uma interface. O formato para definir uma classe como interface é substituir a palavra-chave class que declara a classe pela palavra-chave interface que declara a interface.
Uma interface é uma classe abstrata especial. Nesta classe abstrata, todos os métodos são métodos abstratos e os atributos (ou seja, variáveis de membro) desta classe abstrata são declarados como "nomes de atributos de tipo final estático público". "public static final", ou seja, as variáveis-membro internas são públicas, estáticas e não podem ser alteradas. Portanto, ao declarar uma constante em uma interface, ela pode ser escrita na forma de "constante de tipo final estático público nome = valor (valor)" ou pode ser escrita diretamente na forma de "nome da constante de tipo = valor (valor) )" como: "public static final int id =10" pode ser escrito diretamente na forma de "int id=10", porque as declarações de propriedade padrão na interface são todas "public static final", então "public static final " pode ser omitido. O método abstrato declarado na interface não precisa ser marcado com a palavra-chave abstract, porque todos os métodos na interface são abstratos, então a palavra-chave "abstract" é omitida por padrão, por exemplo, se você declarar essas três palavras em uma interface. , Métodos: "public void start()", "public void run()", "public void "stop()" não são identificados pela palavra-chave abstrata na frente desses três métodos, mas são métodos abstratos, porque os métodos declarados na interface são todos métodos abstratos, portanto a palavra-chave abstrata será omitida nos métodos abstratos no interface Eliminada, porque os métodos declarados por padrão são abstratos. , portanto não há necessidade de escrever a palavra "abstrato". Isso é diferente de quando se declara métodos abstratos em classes abstratas. Ao declarar métodos abstratos em classes abstratas, você deve usar a palavra-chave "abstrato" e em interfaces você pode omitir ". abstract" ao declarar métodos abstratos. Nota: O método abstrato declarado na interface é "público" por padrão e só pode ser "público". A razão pela qual é declarado desta forma é para corrigir problemas que ocorrem facilmente quando ocorre herança múltipla em C++. em C++ é propenso a problemas. O problema é que se várias classes pai de herança múltipla tiverem as mesmas variáveis de membro, será bastante problemático referenciá-las e vários problemas ocorrerão durante a operação. Para corrigir esse problema, JAVA alterou todas as variáveis de membro na interface para static final. Se a variável de membro for do tipo estático, então a variável de membro pertence a toda a classe, em vez de ser exclusiva de um determinado objeto. Para herança múltipla, um objeto de subclasse na verdade contém vários objetos de classe pai, enquanto para herança única, há apenas um objeto de classe pai no objeto de subclasse. Objetos de subclasse multi-herdados têm vários objetos de classe pai e podem haver variáveis de membro duplicadas entre esses objetos de classe pai, o que é muito propenso a problemas. Portanto, esse problema pode ser evitado em JAVA usando Interfaces usadas para implementar herança múltipla. Como uma interface, uma classe pode herdar da interface (ou implementar a interface). Isso também é herança múltipla. As variáveis de membro na interface não são exclusivas de um determinado objeto. Elas são todas variáveis de membro estáticas e pertencem à classe inteira. Portanto, não importa se uma classe implementa múltiplas interfaces e não haverá conflito entre objetos. A implementação de múltiplas interfaces também alcança herança múltipla e evita problemas propensos a herança múltipla. Este é o benefício de usar interfaces para implementar herança múltipla.
1. Defina a interface
Use interface para definir uma interface. As definições de interface são semelhantes a definições semelhantes. Elas também são divididas em declarações de interface e corpos de interface. O corpo da interface consiste em duas partes: definição de constante e definição de método. O formato básico para definir uma interface é o seguinte:
[Modificador] nome da interface da interface [estende a lista de nomes da interface pai]{
[público] [estático] [final] constante;
método [público] [abstrato];
}
Modificador: Opcional, utilizado para especificar a permissão de acesso da interface, o valor opcional é público. Se omitido, as permissões de acesso padrão serão usadas.
Nome da interface: um parâmetro obrigatório, usado para especificar o nome da interface. O nome da interface deve ser um identificador Java legal. Geralmente, letras maiúsculas são obrigatórias.
estende: Lista de nomes da interface pai: parâmetro opcional, usado para especificar de qual interface pai a interface a ser definida herda. Ao usar a palavra-chave extends, o nome da interface pai é um parâmetro obrigatório.
Métodos: Os métodos na interface são apenas definidos, mas não implementados.
Por exemplo, defina uma interface para cálculo, na qual são definidos um PI constante e dois métodos. O código específico é o seguinte:
public interface CalInterface { final float PI=3.14159f;//Define a constante PI usada para representar pi float getArea(float r);//Define um método para calcular a área getArea() float getCircumference(float r);// Define um método para calcular o perímetro getCircumference() }
Perceber:
Assim como os arquivos de classe Java, o nome do arquivo de interface deve ser igual ao nome da interface.
2. Implemente a interface
Depois que uma interface é definida, ela pode ser implementada em uma classe. Para implementar uma interface em uma classe, você pode usar a palavra-chave implements, e seu formato básico é o seguinte:
[Modificador] class <nome da classe> [estende o nome da classe pai] [implementa a lista de interfaces]{
............
}
Modificador: Parâmetro opcional, utilizado para especificar a permissão de acesso da classe. Os valores opcionais são público, abstrato e final.
Nome da classe: um parâmetro obrigatório, usado para especificar o nome da classe. O nome da classe deve ser um identificador Java legal. Geralmente, letras maiúsculas são obrigatórias.
estende o nome da classe pai: parâmetro opcional, usado para especificar de qual classe pai a classe a ser definida herda. Ao usar a palavra-chave extends, o nome da classe pai é um parâmetro obrigatório.
implements interface list: Parâmetro opcional usado para especificar quais interfaces esta classe implementa. Ao usar a palavra-chave implements, a lista de interfaces é um parâmetro obrigatório. Quando houver vários nomes de interface na lista de interfaces, separe-os com vírgulas.
Ao implementar uma interface em uma classe, o nome do método, tipo de valor de retorno, número e tipo de parâmetros devem ser exatamente iguais aos da interface, e todos os métodos na interface devem ser implementados. Por exemplo, escreva uma classe chamada Cire que implemente a interface Calcular definida na Seção 5.7.1. O código específico é o seguinte:
public class Cire implements CalInterface { public float getArea(float r) { float area=PI*r*r;//Calcula a área do círculo e atribui-a à área variável return area;//Retorna a área do círculo calculada} public float getCircumference (float r) { float circunference=2*PI*r; //Calcula a circunferência do círculo e atribui-a à variável circunferência return circumference //Retorna a circunferência calculada} public static void main(String[] args) { Cire c = new Cire();
Na herança de classes, apenas herança única pode ser feita, mas ao implementar interfaces, múltiplas interfaces podem ser implementadas ao mesmo tempo, e cada interface é separada por uma vírgula ",".
Neste momento, podem ocorrer conflitos de nomes de constantes ou métodos (em múltiplas interfaces). Ao resolver este problema, se as constantes entrarem em conflito, você precisará especificar explicitamente a interface da constante. Se ocorrer um conflito de método, você só precisará implementar um método.