classDemo1_InnerClass{publicstaticvoidmain(String[] args){
Outer.Inner oi =newOuter().newInner();
oi.method();}}classOuter{privateint num =10;classInner{publicvoidmethod(){
System.out.println(num);}}}//10
示例(私有内部类的访问)
classDemo2_InnerClass{publicstaticvoidmain(String[] args){//不能创建对象,因为类被私有了//Outer.Inner oi = new Outer().new Inner();//oi.method();
Outer o =newOuter();
o.print();}}classOuter{privateint num =20;privateclassInner{publicvoidmethod(){
System.out.println(num);}}/*
因为内部类被私有了,所以不能创建对象
就在本类中提供方法,本类可以访问私有成员
*/publicvoidprint(){
Inner i =newInner();
i.method();}}//20
//要求:使用已知变量,在控制台输出30,20,10classTest1_InnerClass{publicstaticvoidmain(String[] args){
Outer.Inner oi =newOuter().newInner();
oi.show();}}classOuter{publicint num =10;classInner{publicint num =20;publicvoidshow(){int num =30;
System.out.println(??);
System.out.println(??);
System.out.println(??);}}}
//要求:使用已知变量,在控制台输出30,20,10classTest1_InnerClass{publicstaticvoidmain(String[] args){
Outer.Inner oi =newOuter().newInner();
oi.show();}}classOuter{publicint num =10;classInner{publicint num =20;publicvoidshow(){int num =30;
System.out.println(num);
System.out.println(newOuter().newInner().num);
System.out.println(newOuter().num);}}}
//要求:使用已知变量,在控制台输出30,20,10classTest1_InnerClass{publicstaticvoidmain(String[] args){
Outer.Inner oi =newOuter().newInner();
oi.show();}}classOuter{publicint num =10;classInner{publicint num =20;publicvoidshow(){int num =30;
System.out.println(num);
System.out.println(this.num);
System.out.println(Outer.this.num);}}}
classDemo4_InnerClass{publicstaticvoidmain(String[] args){
Outer o =newOuter();
o.method();}}//局部内部类classOuter{publicvoidmethod(){classInner{publicvoidprint(){
System.out.println("print");}}
Inner i =newInner();
i.print();}/*错误的,局部内部类,只能在其所在的方法中访问
public void run(){
Inner i = new Inner();
i.print();
}
*/}
04_匿名内部类
A:匿名内部类
就是内部类的简化写法
B:前提:存在一个类或者接口
这里的类可以是具体类,也可以时抽象类
C:格式
new 类名或者接口名(){ 重写方法; }
D:本质是什么呢?
其实就是一个继承了该类或者实现了该接口的子类匿名对象
示例 (匿名内部类)*****
classDemo1_NoNameInnerClass{publicstaticvoidmain(String[] args){
Out.In oi =newOut().newIn();
oi.print();
Out o =newOut();
o.method();}}interfaceInter{publicabstractvoidprint();}classOut{classInimplementsInter{publicvoidprint(){
System.out.println("print");}}publicvoidmethod(){//实现Inter对象(匿名对象),并重写newInter(){//new Inter(); 实现Inter接口publicvoidprint(){
System.out.println("print222");//重写抽象方法}}.print();//最后调用print方法}}//print//print222
示例 (匿名内部类重写多个方法调用)*****
classDemo2_NoNameInnerClass{publicstaticvoidmain(String[] args){
Outer o =newOuter();
o.method();}}interfaceInter{publicabstractvoidshow1();publicabstractvoidshow2();}classOuter{publicvoidmethod(){
Inter i =newInter(){//父类引用指向子类对象publicvoidshow1(){
System.out.println("show1");}publicvoidshow2(){
System.out.println("show2");}};
i.show1();
i.show2();}}