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();
}
}
}
プライベート、保護されたデフォルト、公共(およびその一般的なメンバー)、クラスファイルを変更することができます外部内部クラス$クラスの.class
1、非静的な内部クラス(非static内部クラスを使用すると、通常は他のクラスを使用するクラスの外を)
)、非静的内部クラス外部のクラスオブジェクトに堆積されなければなりません。したがって、静的な内部クラスのオブジェクトは、外部の物体の存在を持っている必要がありますのではなく。非静的な内部クラスのオブジェクトは別の外部オブジェクト(自分自身の心に似たパッケージ)に属し
b)の非静的内部クラスは、直接クラスメンバにアクセスできますが、クラスメンバーの外側には、アクセス非静的内部クラスのメンバーはできません。
C)非静的内部クラスは、静的メソッド、静的プロパティと静的初期化ブロックを持つことができません。(それは非静的クラスのメンバーであるため)
D)クラス外部の静的メソッド、静的コードブロック、非静止状態アクセスできない内部クラス、変数の定義を含む、インスタンスを作成するために使用できません。
アクセスe)のメンバ変数:
クラスメソッド内のローカル変数I:変数名
IIの内部クラス属性..この変数名。
.. III外部クラス属性:名.thisクラス外部変数名(属性クラスは、直接外部に使用することができるしている場合のみ)
アクセスF)クラス内の:
私は外部クラス内部クラスで定義されている:新新インナー();
II 。外周外クラスの非静的内部クラス使用:外Outer.Innerのvarnme =(新しい新しい)をnewInner();.
2、内部静的クラス
A)に規定された方法:
静的クラスClassName {//クラスの本体}
B)のポイントを使用して:
I.内部静的クラスオブジェクトが存在する場合、必ずしも外部のオブジェクトに対応する存在しません。したがって、内部の静的クラスのインスタンスメソッドは、クラスのインスタンスメソッドの外側に直接アクセスすることはできません。(静的内部クラスは、クラスの静的メンバである)
クラス外の静的メンバとしてII。静的内部クラス。したがって、この方法は、クラスの外であってもよい:アクセス静的メンバ静的内部クラスウェイ、新しい静的内部クラスのインスタンスを介してアクセス静的インナークラス()「静的内部クラス名」。