java 基础之内部类
内部类的使用
1内部类对象的创建:
非静态内部类:Outer.Inner oi = new Outer().new Inner();
静态内部类:Outer.Inner oi = new Outer().Inner();
2内部类的方法调用
非静态内部类和静态内部类的非静态方法:oi.test();
静态内部类的静态方法:Inner.test();
public class Test1 { private String str1 = "测试静态内部类访问外部非静态变量"; private static String str2 = "测试静态内部类访问外部静态变量"; public static void main(String[] args) { new Test1().new Inner1().test1(); new Test1().new Inner1().test2(); new Test1.Inner2().test1(); new Test1.Inner2().test2(); Inner2.test3(); } private class Inner1{ private String str1 = "测试静态内部类与外部类this的区别"; private static final String str2 = "测试静态内部类中静态字段与外部类this的区别";//非静态内部类中有static的变量必须要有final public void test1(){ System.out.println("测试内部类公共方法"); System.out.println(str1); System.out.println(this.str1); System.out.println(Test1.this.str1); System.out.println(str2); System.out.println(this.str2); System.out.println(Test1.this.str2); } private void test2(){ System.out.println("测试内部类私有方法"); } // public static void test3(){//含有静态方法的内部类必须是静态类 // System.out.println("测试内部类静态私有方法"); // } // } private static class Inner2{ public void test1(){ System.out.println("测试静态内部类公共方法"); //System.out.println(str1); } private void test2(){ System.out.println("测试静态内部类私有方法"); } public static void test3(){ System.out.println("测试静态内部类静态私有方法"); } } }
结果:
测试内部类公共方法
测试静态内部类与外部类this的区别
测试静态内部类与外部类this的区别
测试静态内部类访问外部非静态变量
测试静态内部类中静态字段与外部类this的区别
测试静态内部类中静态字段与外部类this的区别
测试静态内部类访问外部静态变量
测试内部类私有方法
测试静态内部类公共方法
测试静态内部类私有方法
测试静态内部类静态私有方法
3.在其他类中方法的调用:
非静态内部类和静态内部类的非静态方法:oi.test();
静态内部类的静态方法:Outer.Inner.test();
4.方法内部类,只能在当前方法中被调用,调用时必须在类创建后面创建
public class Outer { public void test1(){ System.out.println("测试外部类类公共方法"); } private void test2(){ System.out.println("测试外部类私有方法"); } public void test3(){ class Inner{ public void test(){ System.out.println("测试方法内部类"); } } new Inner().test(); } class Inner1{ public void test1(){ System.out.println("测试内部类公共方法"); } private void test2(){ System.out.println("测试内部类私有方法"); } } static class Inner2{ public void test1(){ System.out.println("测试内部类公共方法"); } private void test2(){ System.out.println("测试内部类私有方法"); } static void test3(){ System.out.println("测试内部类静态方法"); } } }
public class Test { public static void main(String[] args) { new Outer().new Inner1().test1(); new Outer.Inner2().test1(); Outer.Inner2.test3(); new Outer().test3(); } }
测试内部类公共方法
测试内部类公共方法
测试内部类静态方法
测试方法内部类
5.1内部类在其他类中创建与调用有权限限制,但在外部类中调用没有权限限制
5.2含有静态方法的内部类必须是静态类
5.3静态内部类就只能访问外部类的静态成员变量
5.4非静态内部类中有static的变量必须要有final,静态内部类则不必须,因为final类型修饰的变量(即常量)可以离开类实例存活一段时间的。
5.5内部类生成的字节文件名为Outer$Inner.class,方法内部类生成的字节文件名为Outer$1Inner.class