在java中,允许在一个类的内部定义类,这样的类称为内部类,这个类所在的类称为外部类。根据内部类的位置,修饰符和定义的方式分为成员内部类、静态内部类、方法内部类。
成员内部类:
package classfoundation;
class Outer {
private int num = 4;
public void test() {
Inner inner = new Inner();
inner.show();
}
class Inner {
void show() {
System.out.println("num = " + num);
}//内部类可以被外部类中被使用,并能访问外部类的成员
}
}
public class InnerClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer outer = new Outer();
outer.test();
/*若想通过外部类去访问内部类,则需要通过外部类对象去创建内部类对象,
创建内部类对象的具体语法格式
外部类名.内部类名 变量名 = new 外部类名().new 内部类名();*/
Outer.Inner inner = new Outer().new Inner();
inner.show();
}
}
静态内部类:
package classfoundation;
class Outer1 {
private static int num = 6;
// 使用static修饰,定义一个静态内部类
static class Inner {
void show() {
System.out.print("num= " + num);
}
}
}
public class StaticInnerClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer1.Inner inner = new Outer1.Inner();
inner.show();
}
}
1:在静态内部类中只能访问外部类的静态成员。
2:在静态内部类中可以定义静态的成员,而在非静态的内部类中不允许定义静态的成员。
方法内部类:在成员方法中定义的类,只能在当前方法中被使用。
package classfoundation;
class Outer2 {
private int num = 412;
public void test() {
class Inner {
void show() {
System.out.print("num= " + num);
}
}
Inner in = new Inner();
in.show();
}
}
public class MethodInnerClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Outer2 outer = new Outer2();
outer.test();
}
}