Fundación Java (clase interna)

1. Clase interna de miembro

  • Formato de definición:

              clase clase externa {

                       Modificador clase clase interna {}

                 }

  • Método de acceso

            La clase interna de miembros depende de la clase externa, es decir, si desea crear una clase interna de miembro, la premisa es que debe haber un objeto de clase externa.

            Nombre de clase externa Nombre de variable de clase interna = nuevo nombre de clase externa () Nombre de clase interna nueva ();

   Caso:


/**
 * 内部类
 */
public class demo1 {
    public static void main(String[] args) {
        //创建内部类对象
        //Body.heart s=new Body().new heart();
        //s.show();
        Body b=new Body();
        b.getheart();
    }

}
class Body{
    int num=1;
    private class heart{
        int num=2;
        public void show(){
            System.out.println("我是内部类中的方法");
            //访问外部类中的成员变量
            System.out.println(Body.this.num);
            //访问外部类中的成员方法
            Body.this.m1();
            System.out.println(this.num);
        }
    }
    //提供一个访问内部类的发式
    public void getheart(){
        heart h=new heart();
        h.show();
    }
    public void m1(){
        System.out.println("我是外部类成员");
    }
}

2. Clases internas locales

  • La clase interna local es una posición local definida en el método de clase externa. La diferencia entre esta y la clase interna miembro es que el acceso a la clase interna local está limitado al método o al alcance.

    Nota: Una clase interna local es como una variable local en un método, y no puede tener modificadores públicos, protegidos, privados o estáticos.

  • Definir formato

             clase clase externa {

              Modificador valor de retorno tipo de método nombre (parámetro) {

                          clase interna clase {

                                        // Otros códigos

                          }

                  }

           }

  • Método de acceso

            En el método de la clase interna, cree el objeto de clase interna y acceda

Nota: Las clases internas locales solo pueden acceder a variables locales modificadas por final

          Motivo: El ciclo de vida de los objetos de clase interna excederá el ciclo de vida de las variables locales.

          Vida útil de las variables locales: cuando se llama al método, las variables locales en el método se crean en la pila, y cuando se llama al método, la pila se descarga y todas las variables locales mueren.

         La vida útil del objeto de clase interna, como otras clases, cuando se crea un objeto de clase interna local, solo puede morir si nadie más lo hace referencia.

         Por lo tanto, es completamente posible que se haya llamado a un método (la variable local ha muerto), pero el objeto de la clase local todavía está vivo. Es decir: la vida útil de los objetos de las clases locales excederá las variables locales.

Caso:

package day0529;

/**
 * 局部内部类
 * 作用范围:方法内
 */
public class demo2 {
    public static void main(String[] args) {
        class Inner{
            public void show(){
                System.out.println("我是局部内部类中的方法");
            }
        }
        Inner inner=new Inner();
        inner.show();
    }
}

3. Clase interna anónima

  • Propósito : Una clase interna anónima es una forma conveniente de crear un objeto de subclase de cierto tipo. (Las clases internas anónimas son adecuadas para crear clases que solo deben usarse una vez)
  •  Formato:

              nueva clase o interfaz principal () {

                     // Método de reescritura

              };

Caso:

package day0529;

import java.util.Scanner;

/**
 * 匿名内部类
 * 用法:多线程
 */
public class demo3 {
    public static void main(String[] args) {
        //正常方式
        Zi zi=new Zi();
        zi.show();
        //匿名内部类
        Inter inter=new Inter(){
             //快捷键Alt+Enter
            @Override
            public void show() {
                System.out.println("我是匿名内部类中的方法");
            }
        };
        inter.show();
        Abstractclass a=new Abstractclass() {
            @Override
            void show() {
                System.out.println("使用匿名内部类创建抽象类对象");
            }
        };
        a.show();
        //普通类
        Student student=new Student(){
            @Override
            public void show() {
                System.out.println("调用m1(Student student)");
            }
        };
        m1(student);
        m2(a);
        m3(inter);
    }
    public static void m1(Student student){
        student.show();
    }
    public  static void m2(Abstractclass aclass){
        aclass.show();
    }
    public static void m3(Inter inter){
        inter.show();
    }
}
interface Inter{
    void show();
}
class Zi implements Inter{
    public void show(){
        System.out.println("我是接口的实现方法");
    }
}
abstract class Abstractclass{
    abstract void show();
}
class Student{
    public void  show(){
        System.out.println("我是普通类");
    }
}

 

Publicado 75 artículos originales · elogiados 164 · 110,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_41679818/article/details/90678525
Recomendado
Clasificación