外部类调用内部类:
在自己某个方法中,创建一个内部类对象
内部类名 对象引用 = new 内部类名();
在测试类中直接调用内部类,格式:
外部类名.内部类名 对象引用 = new 外部类名().new 内部类名();
*/
class Outer
{
private int num = 10;
class Inner
{
public void show()
{
System.out.println(num);
}
}
public static void method2()//方法一给调用其变量就会从内存上消失;所以无法给其内部类使用
{
//int num2;//局部内部类访问局部变量,该变量必须被final修饰。因为局部变量会在方法调用完毕后,立马消失。
final int num2;//正确方式
//public int num2;//出错,局部变量必须在方法之外给初始化;在类加载时给初始化;不可以在方法直接定义,main函数可以
//System.out.println(num2);//出错;须初始化变量(类的构造方法的作用);没有给初始化不可使用,main函数可以
//因为main是不需要创建对象就可以随类加载而加载;而其他类是要在其对象被建立时才会加载并且对象是在堆内存中
class Inner1
{ public int num2 = 30;//这里算重新定义;与上面定义无关;
public void show()
{
//public int num2 = 20;//出错
System.out.println(num2);//出错;从内部类中访问本地变量num2需要声明为最终类型;
}
}
/* static class Inner4//出错;非法表达式开始;局部方法内不可以有静态成员;
{
public void show4()
{
System.out.println("4444");
}
}
*/
Inner1 i1=new Inner1();
i1.show();
}
public void method()
{
//Inner1 i = new Inner1();
//出错,这里算局部方法是不可以直接调用其他局部方法的对象(内部类)只可以直接创建了调用本类中方法外的内部类
Inner i = new Inner();//本类中调用本类内方法外的内部类方式
i.show();
Outer o=new Outer();//本类中调用方法内部类的方式
o.method2();
}
//静态内部类
static class Inner3
{
public void show3()//若该方法是静态其类也必须静态;其类是静态其方法可以不是静态;
{
System.out.println("123");
}
}
public int getNum()
{
return num;
}
}
class InnerClassDemo1
{
public static void main(String[] args){
//public int b=2;//出错,局部变量前面不可以加修饰符;成员变量才可以这么定义
int b=2;
System.out.println(b);
Outer a = new Outer();
a.method();//外部类调用其他类中方法外的内部类方式A1
Outer.Inner a2 = new Outer().new Inner();//另一方式A2创建了内部类的对象调用方法;相对于非静态内部类
a2.show();
a.method2();//外部类调用其他类中方法内的内部类的方式B(该方式只有一种;其实相当于创建类对象调用方法)
System.out.println(a.getNum());
//静态的方式:
Outer.Inner3 i3=new Outer.Inner3 ();
i3.show3();
}
}