在Java中,允许在一个类的内部定义类,有这样的类称作内部类,这个内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可分为成员内部类、静态内部类、方法内部类。
一、成员内部类
在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类称作成员内部类。在成员内部类中可以访问外部类的所有成员,并且内部类可以在外部类中被调用。需要注意的是,如果内部类被声明为私有,外界将无法访问。
创建内部类对象的具体语法格式如下:
外部类名.内部类名 变量名=new 外部类名().new 内部类名();
package Inner_one;
/*
* 成员内部类
* */
class Father{
private String name=new String("zhangjian");
//定义一个成员内部类
class Child{
//定义内部类的方法
void inToFather(){
System.out.println("name="+name);
}
}
}
public class Inner_one {
public static void main(String[] args) {
Father.Child child=new Father().new Child(); //创建内部类对象
child.inToFather(); //调用方法
}
}
二、静态内部类
可以使用static关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。注意:在静态内部类中只能访问外部静态成员;在静态内部类中可以定义静态的成员,而非静态的内部类中不允许定义静态的成员。
创建静态内部类对象的具体语法格式如下:
外部类名.内部类名 变量名=new 外部类名().内部类名();
package Inner_two;
/*
* 静态内部类
* */
class Father{
//外部静态变量
private static String name=new String("zhangjian");
//定义静态内部类
static class Child{
//静态内部类的方法
void inToFather(){
System.out.println("name="+name);
}
}
}
public class Inner_two {
public static void main(String[] args) {
//创建内部类对象
Father.Child child=new Father.Child();
child.inToFather();
}
}
三、方法内部类
方法内部类指的是在成员方法中定义的类,它只能在当前方法中使用。方法内部类也可以访问外部类成员变量。
package Inner_three;
/*
* 方法内部类
* */
class Father{
//定义成员变量
private String name=new String("zhangjian");
public void test(){
//在方法中定义的内部类
class Child{
void inToFather(){
System.out.println("name="+name);
}
}
Child child=new Child(); //创建内部类对象
child.inToFather(); //调用内部类的方法
}
}
public class Inner_three {
public static void main(String[] args) {
//创建外部类对象
Father child=new Father();
child.test();
}
}