Java clase externa subclase hereda un miembro de la clase interna clase externa, una breve descripción de los miembros de la clase interna

package com.it.study;

public class TestMemberInnerClass {
	public static void main(String[] args) {
		Outer.UnstaticInnerClass varName = new Outer().new UnstaticInnerClass();
		varName.show();
		Outer out = new Outer();
		Outer.UnstaticInnerClass unsi = out.new UnstaticInnerClass();
		unsi.show();
		
		Outer.StaticInnerClass varName2 = new Outer.StaticInnerClass();
		System.out.println(varName2.age);
		System.out.println(varName2.staticPropIner);
		System.out.println(Outer.StaticInnerClass.staticPropIner);
		varName2.show();
//		Outer.StaticInnerClass si = new Outer().new Outer.StaticInnerClass();//当被封闭实例限定时,无法使用其复合名称分配成员类型Outer.StaticInnerClass。成员类型名称相对于限定实例类型进行解析
		
		
		OuterChild otc = new OuterChild();
		OuterChild.UnstaticInnerClass unsi2 = otc.new UnstaticInnerClass();
		OuterChild.StaticInnerClass varName3 = new OuterChild.StaticInnerClass();
	}
}
class OuterChild extends Outer{
}

class Outer{
	private int age = 10;
	private int outerProp = 10;
	public static int staticProp = 10;
	public void OuterSelfMethod() {
		System.out.println(this.new UnstaticInnerClass().age);
	}
	public static void OuterStaticSelfMethod() {
		System.out.println(Outer.StaticInnerClass.staticPropIner);
	}
	class UnstaticInnerClass{
		int age = 20;
		public void show() {
			int age = 30;
			System.out.println("内部类方法里的局部变量age:" + age);// 30
            System.out.println("内部类的成员变量age:" + this.age);// 20
            System.out.println("外部类的成员变量age:" + Outer.this.age);// 10
            System.out.println("外部类的成员变量outerProp:" + outerProp);
            new Outer().OuterSelfMethod();
		}
	}
	static class StaticInnerClass{
		int age = 10;
		static int staticPropIner = 10;
		public void show() {
			int age = 30;
			System.out.println("内部类方法里的局部变量age:" + age);// 30
            System.out.println("内部类的成员变量age:" + this.age);// 20
//            System.out.println("外部类的成员变量age:" + Outer.this.age);// 10
//            System.out.println("外部类的成员变量outerProp:" + outerProp);
            System.out.println("外部类的成员变量staticProp:" + Outer.staticProp);// 10
            System.out.println("外部类的成员变量staticProp:" + staticProp);
//            OuterSelfMethod();
            Outer.OuterStaticSelfMethod();
		}
	}
}

Puede ser modificado con privado, por defecto, protegido, público (y los miembros generales de la misma), archivos de clase: externa de clase $ clase interna .class
1, las clases internas no estáticos (fuera de clase para usar clases internas no estáticos y por lo general utilizar la otra clase )
a) las clases internas no estáticos deben ser depositados en un objeto de la clase externa. Por lo tanto, en lugar de objeto de clase interna estática debe tener una presencia de objeto externo. objeto clase interna no estática pertenece a un objeto externo separado (paquete, similar a la del propio corazón)
b) clases internas no estáticos pueden acceder directamente a los miembros de la clase, pero fuera de miembros de la clase no puede miembros de la clase interiores no estáticos de acceso.
c) una clases internas no estáticos no pueden tener métodos estáticos, propiedades estáticas y bloque de inicialización estática. (Debido a que es miembro de la clase no estática)
método estático externo D) de clase, un bloque de código estático, el estado no estática no puede acceder clase interna, incluyendo la definición de variables y no se puede utilizar para crear una instancia.
Acceso e) variable miembro:
I las variables locales dentro de un método de clase: nombre de la variable
atribuye ii clases interna: .. el nombre de esta variable.
.. III Clase externos Características: nombre .Esta nombres de clase variables externas (atributo sólo si la clase tiene externa, se puede utilizar directamente)
el acceso f) dentro de la clase:
I definida en una clase interna de clase externo:. Interior nueva nueva ();
II . fuera de clase exterior usando clases internas no estáticos: varnme Outer.Inner exterior = nuevo new () newInner () ;.
2, la clase estática interna
a) método definido:
NombredeClase clase estática {// cuerpo de la clase}
B) utilizando los puntos de:
I. Cuando hay un objeto de clase estática interna, no existe necesariamente correspondiente al objeto externo. Por lo tanto, el método de instancia de clase estática interna no es directamente accesible desde fuera el método de instancia de clase. (Estático clase interna es un miembro estático de la clase)
ii. Estático clase interna como un miembro estático fuera de la clase. Por lo tanto, el método puede ser fuera de la clase: acceso estático miembro estático de la clase interna "estático nombre de la clase interior". Way, a través de las clases internas nuevo acceso estático interior instancia de clase estáticos ().

Publicado 37 artículos originales · ganado elogios 29 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/qq_42755868/article/details/104876605
Recomendado
Clasificación