Medidas oficiais
Uma palavra -chave "final" fornecida pelo idioma Java pode ser usada para executar esta tarefa. Dê uma olhada no seguinte exemplo de código -fonte:
A cópia do código é a seguinte:
// finaldemo.java
Public Final Class FinalDemo {
}
Vamos fazer outra classe abaixo, que herdará a classe declarada acima. A palavra -chave "estende" fornecida pelo idioma Java permitirá que uma classe herda de uma classe existente.
A cópia do código é a seguinte:
// finaldemo2.java
classe pública FinalDemo2 estende FinalDemo {
}
Depois de compilar a primeira aula, se você compilar a segunda classe, o JDK Compiler relata um erro e receberá a seguinte mensagem de erro:
Finaldemo2.Java:1: Não é possível herdar da FinalDemo Final
classe pública FinalDemo2 estende FinalDemo {}
^
1 erro
Agora, você impediu que a primeira classe fosse herdada por outra classe através de métodos oficiais.
Medidas não oficiais
No entanto, a maneira de impedir que as classes sejam herdadas por outras classes não é única. Considerando o código a seguir, declaro que o construtor é privado e também declaro um método estático para retornar um objeto de classe.
A cópia do código é a seguinte:
classe pública PrivateTest {
private privatetest () {
System.out.println ("Construtor de padrão privado");
}
public static privatetest getInstance () {
retornar new privatEtest ();
}
}
O código modificado acima é chamado de "padrão singleton", um método getInstance sempre retorna apenas uma instância dessa classe. Mas por que esse código impede que a classe seja herdada? Considere o código a seguir, a classe declarada deve herdar a classe acima.
classe pública PrivateTest2 estende PrivateTest {
}
Depois de compilar a primeira aula, se você compilar a segunda classe, o JDK Compiler relata um erro e receberá a seguinte mensagem de erro:
Privatetest2.java:1: privatEtest () tem acesso privado no PrivateTestest
classe pública PrivateTest2 estende PrivateTest {
^
1 erro
A segunda classe não pode herdar a primeira classe. Mas o que o erro significa? O idioma Java exige que pelo menos um método de componente seja fornecido em uma classe. Se você não fornecer nenhum método de artefato, o JDK inserirá um método de artefato padrão na classe que você declarou. Em outras palavras, o padrão é um método de componente sem parâmetros, corpo de componente vazio e uma permissão de acesso público. No entanto, se você definir um método de componente, o compilador JDK não inserirá um método de componente padrão. Acabamos de declarar um método de componente padrão na classe PrivateTest, mas alteramos a permissão de acesso público padrão para permissão privada, que está alinhada com as regras da verificação de sintaxe do compilador JDK.
Agora vamos dar uma olhada no segundo departamento. O idioma Java também exige que você chame o método de componente da Super Class na primeira linha do método do componente. Isso é necessário para iniciar os recursos de herança. Em Java, concluímos esta tarefa chamando o método super (), que será mapeado para o método de componente de uma superclasse. Se você não fornecer um construtor padrão para a superclasse, o compilador JDK inserirá um método de componente de superclasse padrão para chamar.
Acabamos de declarar o construtor como uma permissão privada na primeira classe. Agora, quando herdamos essa classe de outras classes, o compilador tentará chamar um método de componente de superclasse padrão. Como os métodos de componentes no escopo da superclasse são declarados como permissão privada, o compilador relatará um erro dizendo que os métodos de componentes da superclasse não podem ser chamados. Portanto, impedimos que uma classe seja herdada por outras classes através de métodos não oficiais.
Usman Saleem
Universidade Mohammad Ali Jinnah
E-mail: [email protected]