En este artículo le permite mejorar rápidamente la comprensión de la clase interna

Las clases internas

¿Cuál es la clase interna? El concepto es simple punto de programación orientada a objetos. En la programación orientada a objetos, es otra clase dentro de una definición de clase, la clase referida como una clase anidada, hay dos tipos, es decir, estáticas y clases anidadas anidados no estáticos. clases anidadas estático de frecuencia usan muy poco, menos que lo básico, lo más importante es la clase anidada no estático, también conocida como las clases internas (interior). clase interna adicional es una parte importante del lenguaje JAVA. clase interna dentro de una clase puede estar en casi cualquier lugar, puede ser una variable de instancia en el mismo, o en los métodos de, o incluso una parte de la expresión.

Si se especifica el significado de la existencia de una clase a otra clase, se puede poner esto en una clase dentro de otra clase. La clase se define en la clase interna puede estar formada como clase interna. Una clase también define las clases B, clase B es el tipo interno. Clase B se puede utilizar como un miembro de la mirada de clase A en.

Nuestra clase interna desde el exterior es muy fácil de entender, no es más que una clase dentro de una definición de clase.

En primer lugar, busca tres definiciones como clases internas:
clase interna 1, una clase (clase externo) define directamente;
2, en un método (método de la clase externa) definido dentro de la clase;
3, las clases internas anónimas .

características de clase internos:
1, clases internas tienen acceso directo a los miembros fuera de la clase, incluyendo miembros privados
2, los miembros de la clase externa a acceder dentro de la clase, hay que crear un objeto dentro de la clase
3, la ubicación interna miembro de la clase es miembros internos clase
4, la clase de posición local dentro de la clase interna parcial

Los miembros de la clase interna privada se modifica

  • Los miembros de la clase interna es la clase interna más común, que es un miembro de la clase envolvente, todas las propiedades y métodos para acceder a los miembros periféricos de la clase por lo que puede ser ilimitada, aunque privada, pero el acceso a las propiedades de miembro clase envolvente dentro de la clase y los métodos a instancia de clase dentro accesible.
public class InnerClass2 {
    public static void main(String[] args) {
       //创建内部类对象,并执行show()
       
	/* -- Outer2.Inner2 oi = new Outer2().new Inner2();
	 * -- 报错,Inner2已经被private了
	 */

       //3,测试被private的内部类的资源能否执行!
       new Outer2().test();
    }
}

class Outer2{
    //2,如果想要访问private的内部类,可以访问外部类提供的对应方法
    public void test() {
       //访问内部类方法
      new Inner2().show();
    }    
    
    //位置在类里方法外--成员内部类
    //1,内部类可以被private修饰,但是外界无法直接创建对象了!
    private class Inner2{
       public void show() {
           System.out.println("Inner2.show()");
       }
    }
}

Modificado clase interna estática estática llama dentro, pero preferimos llamar a la clase interna anidada. Entre las clases internas estáticas y unas clases internas no estáticos La mayor diferencia, sabemos que las clases internas no estáticos después de la terminación de la traducción se dispone implícitamente una referencia que los puntos para crear dentro de su periferia, pero las clases internas estáticas, sino no.

  • No se requiere depende de la creación de la clase envolvente.

  • No se puede utilizar cualquier variables miembro no estáticos y métodos de la clase envolvente.

public class InnerClass3 {
    public static void main(String[] args) {
       // 创建内部类对象测试show()
    
	/* -- Outer3.Inner3 oi = new Outer3().new Inner3();
	 * -- 报错,原因是Inner3是静态的内部类
	 */
	   Outer3.Inner3 oi = new Outer3.Inner3();//Outer3.Inner3通过类名.调用类中的静态资源
       oi.show();    
       Outer3.Inner3.show2();//调用静态内部类里的静态方法
    }
}

class Outer3{    
    //1,内部类被static修饰--随着类的加载而加载,会造成内存资源浪费,并不常用!
    static class Inner3{ 
       public void show() {
           System.out.println("Inner3.show()");
       }
       static public void show2() {
           System.out.println("Inner3.show2()");
       }
    }
}

clases internas locales : Hay una clase interna que está anidado en el método y en función, para el uso de esta clase se utilizan principalmente para resolver problemas más complejos, queremos crear una clase para ayudar a nuestras soluciones, a entonces no quiere esta clase está disponible al público, así que tuvimos una clase interna local, tal como un miembro de las clases internas locales y las clases internas se compilan, pero su alcance ha cambiado, sólo puede estar en el método y la propiedad utilizado, las propiedades y el método fallará.

Clases internas anónimas pertenecen a unas clases internas locales, y no hay un nombre interno de la clase.

public class InnerClass5 {
    public static void main(String[] args) {
       new Hello() {// 匿名对象,本身接口不能new,这里new Hello()匿名对象,就相当于Hello接口的实现类
           // 匿名内部类
           @Override
           public void save() {
           System.out.println("save()..");
           } 
           @Override
           public void update() {
              System.out.println("update()..");
           }
       }.update();// 触发指定的方法
       new Hello2() {//抽象类的匿名内部类
           @Override
           public void show() {  }
       }.show();       
       new Animal() {//普通类的匿名内部类
           @Override
           public void eat() {   }
       };
    }
}

//创建匿名对象+匿名内部类测试
class Animal{
    public void eat() {}
}

abstract class Hello2 {
    abstract public void show();
    public void delete() {   }
}

// 定义接口
interface Hello {
    void save();
    void update();
}
观察上面的代码,我们看清几个地方:
	 -- 匿名内部类是没有访问修饰符的。
     -- new 匿名内部类,这个类首先是要存在的。如果我们将那个InnerClass接口注释掉,就会出现编译出错。
     -- 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。

Resumen: ¿Por qué queremos usarlo dentro de la clase? Leer "Piense en Java" debería saber, que incluye esta frase: "de programación Java en la razón más atractiva interno: Cada clase interna puede heredar de forma independiente una implementación (interfaz), por lo que independientemente de si los hereda de la clase que encierran una aplicación (interfaz), para las clases internas no se ven afectados ". incluso se puede decir que la interfaz sólo resuelve parte del problema, mientras que la clase interna para que las múltiples formas de herencia y los medios para hacer soluciones más completa.

Publicado 36 artículos originales · alabanza ganado 13 · vistas 1056

Supongo que te gusta

Origin blog.csdn.net/weixin_44598691/article/details/104971473
Recomendado
Clasificación