Java 内部类Word下载.docx
《Java 内部类Word下载.docx》由会员分享,可在线阅读,更多相关《Java 内部类Word下载.docx(14页珍藏版)》请在冰豆网上搜索。
[java]viewplaincopy
packagejavaLearing.InnerClass;
publicclassOuter{
publicStringstr1="
str1"
;
protectedStringstr2="
str2"
privateStringstr3="
str3"
privatestaticStringstr4="
str4"
privatevoidprint(){
System.out.println("
Outerstr1:
"
+str1);
Outerstr2:
+str2);
Outerstr3:
+str3);
Outerstr4:
+str4);
}
publicInnergetInnerInstance(){
returnnewInner();
publicclassInner{
publicStringstr3="
Innerstr3"
privateStringstr4="
InnerStr4"
publicvoidprint(){
Innerclassprint"
);
Outer.this.print();
Outer:
+Outer.this);
Outerstr3actualshouldbe:
+Outer.this.str3);
Outerstaticstr4actualshouldbe:
+Outer.str4);
publicstaticvoidmain(String[]args){
Outero=newOuter();
Outer.Inneri2=o.getInnerInstance();
i.print();
i2.print();
}
结果:
Innerclassprint
str1
str2
Innerstr3
InnerStr4
str3
str4
javaLearing.InnerClass.Outer@15db9742
注意:
成员内部类不能含有static的变量和方法。
反编译看看:
看内部类的购造函数,就了解为什么可以访问外部类的成员变量了。
2.静态内部类
用static修饰的内部类。
只能访问外部类的静态成员变量和方法。
所以也不能通过this来访问外部类的实例成员变量和方法。
publicclassOuter2{
publicstaticStringstr1="
publicstaticStringstr2="
privatestaticvoidprint(){
publicstaticclassInner{
privateStringstr1="
Innerstr1"
+Outer2.str1);
Innerstr1:
Outer2.print();
Outer2.Inneri=newOuter2.Inner();
结果
Innerstr1
生成的class文件如下:
静态内部类并没有持有外部类的引用。
3.局部内部类
定义在方法体或者一个作用域内的内部类。
不能带private,public,protected修饰符。
可以带final,abstract。
类似一个局部变量。
可以访问外部类的成员变量和方法。
可以访问作用域的参数和局部变量。
相应的,static方法/语句块中定义的内部类,只能访问静态成员。
interfaceInnerInterface{
publicvoidprint();
publicclassOuter3{
publicvoidprint()
{
Outer3str1:
Outer3str2:
Outer3str3:
Outer3str4:
publicstaticvoidInnerPrint()
classInnerimplementsInnerInterface{
StaticMethodInnerstr1"
StaticMethodInnerclassprint"
+Outer3.str4);
Inneri=newInner();
publicInnerInterfacegetInnerInstance(booleanb){
intvar=10;
Outer3o=newOuter3();
Methodparameter:
+b);
Methodvariable:
+var);
Methodo:
+o);
+Outer3.this.str1);
+Outer3.this.str2);
+Outer3.this.s