在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();
}
}
加油吧!!!