如果在一个类中使用内部类,可以在内部类中直接存取其所在类的私有成员变量。
成员内部类的语法:
public class OuterClass {
private class InnerClass{
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
}
}
在内部类中可以随意使用外部类的成员方法以及成员变量,尽管这些类成员被修饰为private,
内部类的实例一定要绑在外部类的实例上,如果从外部类中初始化一个内部类对象,那么内部类对象就会绑定在外部类对象上。内部类初始化方式与其他类初始化方式相同,都是使用new关键字。
下面看一个实例:
package math;
public class OuterClass {
innerClass in=new innerClass(); //在外部类实例化内部类对象引用
public void ouf(){
in.inf(); //在外部类方法中调用内部类方法
}
class innerClass{
innerClass(){
} //内部类构造方法
public void inf(){ //内部类成员方法
}
int y=0; //内部类成员变量
}
public innerClass doit(){ //外部类方法,返回值为内部类引用
in.y=4;
return new innerClass();//返回内部类引用
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
OuterClass out =new OuterClass();
//内部类的对象实例化操作必须在外部类或者外部类的非静态方法中实现
OuterClass.innerClass in=out.doit();
OuterClass.innerClass in2=out.new innerClass();
}
}
外部类创建内部类实例与其他类创建对象引用时相同。内部类可以访问它的外部类成员,但内部类的成员只有在内部类的范围之内是可知的,不能被外部类使用。
对内部类的成员变量y再次赋值时将会出错,但是可以使用内部类对象引用调用成员变量y。
需要注意的是:如果在外部类和非静态方法外实例化内部类对象,需要使用外部类。
如果不使用doit()方法返回内部类对象引用,可以直接使用内部类实例化内部类对象,但由于是在主方法中实例化内部类对象,必须在new操作之前提供一个外部类的引用。