一、内部类
在Java中,允许在一个类的内部定义类,这样的类称作内部类,这个内部类所在的类称作外部类。
1、 成员内部类
在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。
在成员内部类中可以访问外部类的所有成员。例如:
class Outer {
private int num- 4; //定义类的成员变量
//下面的代码定义 r个成员方法,方法中访阿内部类
publie void test() {
Inner inner- new Inner();
inner. show();
}
//下面的代码定义了一个成员内部类
class Inner {
void show() {
//在成员内部类的方法中访问外部类的成员变量System.out.println ("num= "+ num);
}
}
}
public class Example16 {
public static void main(String[] args) {
Outer outer=new Outer(); //创建外 部类对象
outer.test(); //调用test()方法
}
}
Outer类是一 个外部类,在该类中定义了一个内部类Inner和一个test()方法,其中,Inner类有一个show()方法,在show()方法中访问外部类的成员变量num,test()方法中创建了内部类Inner的实例对象,并通过该对象调用show(方法,将num值进行打印。从运行结果可以看出,内部类可以在外部类中被使用,并能访问外部类的成员。
如果想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,创建内部类对象的具体语法格式如下:
外部类名 . 内部类名 变量名= new 外部类名(). new 内部类名();
例如:
public class Example {
public static void main (String [] args) {
Outer . Inner inner = new Outer () . new Inner(); //创建内部类对象
inter. show() ; //调用 show ()方法
}
}
2、静态内部类
关键字来修饰一个成员内部类,该内部类被称作静态内部类,它可以在不创建外部类对象的情况下被实例化。
创建静态内部类对象的语法格式:
**外部类名. 内部类名 变量名 = new 外部类名 . 内部类名 ( ) ;**
例题:
class outer {
private static int num=6;
//下面的代码定义了一个静态内部类
static class Inner {
void show() {
System. out.println ("num="+ num) ;
}
}
}
class Example18 {
public static void main(String[] args) {
Outer. Inner inner=new Outer .Inner (); //创建内部类对象
inner .show() ; //调用内部类的方法
}
}
3、方法内部类
方法内部类是指在成员方法中定义的类,它只能在当前方法中被使用。
class Outer {
private int num=4; //定义成员变量
public void test() {
//下面是在方法中定义的内部类
class Inner
void show() {
System .out .println("num="+ num); //访问外部类的成员变量8
}
Inner in=new Inner(); //创建内部类对象
in.show(); //调用内部类的方法
}
}
public class Example19 {
pubie statice void main (String [ ] args) {
Outer outer=new Outer(); // 创建外部类对象
outer . test ( ); // 调用test()方法
}
}
在Outer类的test()方法中定义了一个内部类Inner。由于Inner是方法内部类,因此程序只能在方法中创建该类的实例对象并调用show()方法。从运行结果可以看出,方法内部类也可以访问外部类的成员变量num。