在Java中允许在一个类的内部类定义类,这样的类称为内部类,内部类所在的类称为外部类。根据内部类的位置,修饰符和定义的方式可以分为成员内部类,静态内部类和方法内部类。
成员内部类 我们知道在一个类中可以定义构造方法,成员方法,成员变量,还可以定义类,这个类被称为内部类,内部类可以访问外部类的所有成员。 实例: public class Example08 { public static void main(String[] args) { //创建外部类对象 OuterClass outerClass = new OuterClass(); //调用外部类方法 outerClass.outerTest(); } } class OuterClass{ //定义一个成员变量 int num = 10; //定义一个方法,方法中访问内部类 public void outerTest(){ InnerClass innerClass = new InnerClass(); innerClass.innerTest(); } //定义一个内部类 class InnerClass{ public void innerTest(){ System.out.println("我是成员内部类我可以访问外部类成员--" + num); } } }运行结果: 如果我们想同过外部类去访问内部类的话,需要通过外部类对象去创建内部类对象,语法格式:
外部类名.内部类名 变量名 = new 外部类().new 内部类();
我们将上面实例修改为如下代码:
public class Example08 { public static void main(String[] args) { /*//创建外部类对象 OuterClass outerClass = new OuterClass(); //调用外部类方法 outerClass.outerTest();*/ OuterClass.InnerClass innerClass = new OuterClass().new InnerClass(); innerClass.innerTest(); } }运行结果不变:
静态内部类 使用static关键字修饰一个成员内部类,该类被称为静态内部类。静态内部类可以不创建外部类而被实例化,语法格式如下:外部类名.内部类名 变量名 = new外部类名.内部类名();
实例:
public class Example08 { public static void main(String[] args) { //创建内部类对象 OuterClass.innerClass innerClass = new OuterClass.innerClass(); //调用内部类对象 innerClass.print(); } } class OuterClass{ //定义一个静态内部类 static class innerClass{ //定义一个成员变量 private static int num = 10; public void print(){ System.out.println("num = " + num); } } }使用静态内部类有以下两点需要注意:
静态内部类只能访问外部类的静态成员。在静态内部类只能定义静态成员,而非静态内部类不可以定义静态成员。 方法内部类 在方法中定义的类称为方法内部类,该类只能在该方法中使用。 实例: public class Example08 { public static void main(String[] args) { OuterClass outerClass = new OuterClass(); outerClass.print(); } } class OuterClass{ //定义一个成员变量 private int num = 20; public void print(){ //定义一个方法内部类 class MethodInnerClass{ //定义一个方法 public void print(){ System.out.println("num = " + num); } } //创建内部类对象并调用内部类方法 new MethodInnerClass().print(); } }加油吧!!!