Noções básicas de Java - classes internas

Em Java, é permitido definir uma classe dentro de uma classe, tal classe é chamada de classe interna, e a classe onde a classe interna está localizada é chamada de classe externa. No desenvolvimento real, de acordo com a posição, modificador e método de definição da classe interna, a classe interna pode ser dividida em quatro tipos, ou seja, classe interna membro, classe interna local, classe interna estática e classe interna anônima.

Classe interna de membro (classe interna de membro):

  1. Definido na posição de membro da classe externa, associada à instância da classe externa e à classe interna sem modificação estática .
  2. Todos os membros da classe externa, incluindo membros privados, podem ser acessados ​​diretamente e as instâncias podem ser criadas por meio do objeto da classe externa.
  3. Sintaxe de uso: nome da classe externa.nome da classe interna nome da variável = novo nome da classe externa ().novo nome da classe interna ();

Classe interna local (classe interna local):

  1. Definido dentro de um método ou bloco de código, o escopo de ação é limitado ao método ou bloco de código onde está localizado.
  2. Não pode ter modificador de acesso e só pode ser usado dentro do método ou bloco de código no qual está definido.
  3. Pode acessar variáveis ​​locais no método ou bloco de código (deve ser final ou efetivamente final).
  4. Sintaxe de uso: nome da classe interna da classe {...}

Classe interna estática (classe interna estática):

  1. Definida na classe externa, é uma classe interna decorada com static .
  2. Não tem nada a ver com a instância da classe externa e pode ser acessado diretamente através do nome da classe externa.Nome da classe interna.
  3. Você só pode acessar diretamente os membros estáticos da classe externa e criar instâncias , e não pode acessar membros não estáticos.
  4. Sintaxe de uso: nome da classe externa . nome da classe interna estática nome da variável = novo nome da classe externa ().nome da classe interna estática ();

Classe interna anônima (classe interna anônima):

  1. Não existe uma definição explícita e ela é criada diretamente pela instanciação de uma interface ou de uma classe abstrata.
  2. Nenhuma nomenclatura é necessária e geralmente é usada quando um método precisa ser substituído temporariamente para simplificar a escrita do código .
  3. Pode ser uma classe de implementação de uma interface ou uma subclasse herdada de uma classe abstrata.
  4. Sintaxe de uso: novo nome da interface/nome da classe abstrata() { //Parte de implementação da classe interna anônima}

Os exemplos a seguir demonstram o uso de diferentes tipos de classes internas:

public class OuterClass {
    private int outerVariable = 10;
    private static int outerStaticVariable = 20;

    // 成员内部类
    public class MemberInnerClass {
        public void display() {
            System.out.println("成员内部类:" + outerVariable);
        }
    }

    // 静态内部类
    public static class StaticInnerClass {
        public void display() {
            System.out.println("静态内部类:" + outerStaticVariable);
        }
    }

    // 方法示例
    public void displayLocalInnerClass() {
        int localVariable = 30; // 局部变量

        // 局部内部类
        class LocalInnerClass {
            public void display() {
                System.out.println("局部内部类:" + localVariable);
            }
        }

        LocalInnerClass localInnerObj = new LocalInnerClass();
        localInnerObj.display();
    }

    // 匿名内部类示例
    public void displayAnonymousInnerClass() {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类");
            }
        };

        Thread thread = new Thread(runnable);
        thread.start();
    }

    public static void main(String[] args) {
        OuterClass outerObj = new OuterClass();

        // 使用成员内部类
        OuterClass.MemberInnerClass memberInnerObj = outerObj.new MemberInnerClass();
        memberInnerObj.display();//运行:成员内部类:10

        // 使用静态内部类
        OuterClass.StaticInnerClass staticInnerObj = new OuterClass.StaticInnerClass();
        staticInnerObj.display();//静态内部类:20

        // 调用局部内部类示例方法
        outerObj.displayLocalInnerClass();//局部内部类:30

        // 调用匿名内部类示例方法
        outerObj.displayAnonymousInnerClass();//匿名内部类
    }
}

Este exemplo demonstra o uso de quatro tipos diferentes de classes internas:

  1. Classe interna de membro (classe interna de membro): crie uma instância de classe interna por meio de uma instância de classe externa e seja capaz de acessar variáveis ​​​​de membro da instância de classe externa.

  2. Classe interna estática (classe interna estática): acesse a classe interna diretamente através do nome da classe externa, não tem nada a ver com a instância da classe externa e só pode acessar os membros estáticos da classe externa.

  3. Classe interna local (Classe interna local): A classe interna definida no método só é visível no método e pode acessar as variáveis ​​locais do método, mas as variáveis ​​locais devem ser finais ou efetivamente finais.

  4. Classe interna anônima (classe interna anônima): criada pela instanciação de uma interface ou classe abstrata e não possui definição explícita, geralmente usada para substituir um método necessário uma única vez. No exemplo, a interface Runnable é implementada por meio de uma classe interna anônima e um thread é criado.

Acho que você gosta

Origin blog.csdn.net/m0_74293254/article/details/132320498
Recomendado
Clasificación