Java Classe Interna
1. O que é uma categoria interna?
A definição de uma classe é colocada dentro de outra classe, e esta classe é chamada de classe interna
2. Quais são as características das classes internas?
1. A classe interna ainda é uma classe independente. Após a compilação, a classe interna será compilada em um arquivo .classe independente, mas é precedido pelo nome da classe e pelo símbolo $ da classe externa.
2. As classes internas não podem ser acessadas de maneiras comuns. A classe interna é um membro da classe externa; portanto, a classe interna pode acessar livremente as variáveis de membro da classe externa, privadas ou não.
3. Se a classe interna for declarada como estática, não poderá acessar as variáveis de membro da classe externa à vontade. No momento, a classe interna pode acessar apenas as variáveis estáticas do membro da classe externa.
3. Quais são as categorias internas?
1. Classe interna do membro
como:
pacote com.test01; public classe A {// Classe B Intena B herda TestPojo e implementa a classe B da interface TestInterface estende o testPOJO implementa TESTInterface {// Classe INNER da Classe B public public void run () {System.out.println ("Estou em execução!"); } // Reescreva o método da interface public void testf () {System.out.println ("implemente a interface!"); }} // Ligue para a classe interna public void test () {b b = new B (); B.Testf (); // Use o método de interface de reescrita b.run (); // Ligue para o seu próprio método b.testpojo (); // Método de chamada herdando a classe pai} // Teste principal do método public static void main (string [] args) {a a = new a (); A.Test (); }} // define uma interface, o método é testf () interface teseInterface {public void testf ();} // define um método de classe normal testpojo () classpojo {public void testPojo () {System.out.println ("I Am a simples PoJo"); }} // implemente para chamar os métodos na classe interna da classe textone {public static void main (string [] args) {ab b = novo a (). New b (); // chamando a classe interna B na classe A /** é equivalente ao seguinte código* a a = novo a (); * Ab b = a.new b (); * */ b.testf (); // Use o método de interface de reescrita b.run (); // chamando seu próprio método b.testpojo (); // chamando o método que herda a classe pai}}2. Classe interna do método
pacote com.test01; public class Perstest {public void test () {// Defina uma classe de método ne {// Defina um método classe interna public void Fle () {// Defina um método de classe interna System.out.println ("Estou voando!"); }}; novo ne (). Fle (); // chamando o método da classe interna} public static void main (string [] args) {new PertST (). Test (); //Teste}} Nota: (1) A classe interna do método só pode ser instanciada dentro do método que define a classe interna e não pode ser instanciada fora desse método.
(2) O objeto de classe interna do método não pode usar variáveis locais não finais do método em que a classe interna está localizada.
Como as variáveis locais do método estão na pilha, elas existem apenas durante a vida do método. Quando um método termina, sua estrutura de pilha é excluída.
Variáveis locais se tornam história. No entanto, após o término do método, os objetos da classe interna criados dentro do método ainda podem existir na pilha!
Por exemplo, se uma referência for passada para algum outro código e for armazenada em uma variável de membro. Como as variáveis locais não podem ter a mesma vida longa que as dos objetos de classe interna do método, os objetos de classe interna não podem usá -los. (Esse entendimento vem da Enciclopédia Baidu)
3. Classe interna anônima
1) Resumo Classes Internas Anônimas
pacote com.anonymous; public class AbstractClass {public void test () {// O método é testar testa a = new testa () {// implementar classe abstrata @Override public void run () {// Implementar classe abstract system.out.println ("Estou usando a classe interna abstrata anônima"); }}; a.run (); // chamando o método da classe interna} public static void main (string [] args) {new AbstractClass (). Test (); // teste}} // Definir um método abstrato de classe abstrato é executado () classe abstrata testa {public abstract void run ();}2) Interface Classe Interna Anônima
pacote com.anonymous; classe pública testanonymous {myInterface m = new myInterface () {// implemente a interface public void eat () {// reescreva o myInterface Interface Method System.out.println ("Estou fazendo uma refeição!"); }}; public void SS () {// Método SS M.Eat (); // Chame o método substituído} public static void main (string [] args) {new testAnonymous (). Ss (); // teste}} // define um método de interface como EatInterface myInterface {public void Eat ();}Nota: As classes internas anônimas podem ser definidas nos métodos ou nos membros da classe. Não importa quais são as classes internas anônimas, elas não podem ser chamadas diretamente por classes externas.
4. Qual é o papel das categorias internas?
Cada classe interna pode herdar independentemente de uma implementação (interface), portanto, se a classe periférica herdou uma determinada implementação (interface) não tem efeito na classe interna. Sem a capacidade fornecida por classes internas de herdar várias classes concretas ou abstratas, são difíceis alguns problemas de design e programação. Nessa perspectiva, as classes internas tornam a solução de herança múltipla completa.
As interfaces resolvem alguns problemas, enquanto as classes internas implementam efetivamente a "herança múltipla".
Obrigado pela leitura, espero que isso possa ajudá -lo. Obrigado pelo seu apoio a este site!