首先,Java显示的内部类分为两种,静态内部类和非静态内部类。而两者的区别和用static修饰的变量或方法相同,即该内部类是属于类还是属于类的实例对象。
对静态内部类来说,该静态内部类可由其外部类直接调用,之前新建类实例的时候需要new Class()
,而现在只需要new OuterClass.InnerClass()
即可。
而非静态内部类,它的调用者为外部类的实例,所以应该使用new OuterClass().new InnerClass()
。
测试代码如下:
/**
* 创建时间:2015年10月27日 下午12:47:07
* @author donghl
* 类说明:Java内部类的测试
*/
public class StaticTest {
public static void main(String[] args) {
/*
* 外部类本身的调用
*/
// 静态方法
StaticTest.test1(); // new StaticTest().test2(); 正确,不建议使用
// 非静态方法
new StaticTest().test2();
/*
* 静态内部类的调用
*/
// 静态方法
StaticTest.T1.test1(); // new StaticTest.T1().test1(); 正确,不建议使用
// 非静态方法
new StaticTest.T1().test2();
/*
* 非静态内部类的调用
*/
// 静态方法 不支持
// 非静态方法
new StaticTest().new T2().test2();
}
public static void test1() {
System.out.println("StaticTest.test1");
}
public void test2() {
System.out.println("StaticTest.test2");
}
/**
* 静态内部类
*/
public static class T1 {
// 静态方法
public static void test1() {
System.out.println("T1.test1");
}
// 非静态方法
public void test2() {
System.out.println("T1.test2");
}
}
/**
* 非静态内部类
*/
public class T2 {
// 不支持静态方法
// public static void test1() {}
// 非静态方法
public void test2() {
System.out.println("T2.test2");
}
}
}