javase内部类
- 定义:把一个类放入另一个类
- 内部类分类
- 非静态内部类
- 静态内部类
- 内部类的作用
- 提供了良好的封装性
- 内部类可以直接访问外部类的私有属性
- “匿名内部类”适合一次性使用场景
- 与外部类的区别
- 修饰词增加,可以用描述方法的访问符号修饰内部类(private、protected、static)
- 非静态内部类不允许拥有静态成员
- 非静态内部类
- 注意:方法中也可以定义内部类
-
1 //外部类调用内部类的使用和外部类相似 2 public class out { 3 private int out_private_int = 1; 4 private int out_private = 1024; 5 public out(){ } 6 public class in{ 7 private int in_private_int = 2; 8 private String out_private_int = "壹"; //结果:①与外部类同名的变量 9 public in(){ 10 System.out.println("这是非静态内部类in的无参构造器"); 11 //访问与外部类同名的变量 12 System.out.println(out_private_int); //由内向外寻找调用,此处接过为① 13 System.out.println(out_private);//结果:1024非静态内部类可以访问外部类成员,反过来(如果被调用属性非static)则不可 14 } 15 } 16 17 public in test(){ 18 in a = new in(); 19 return a; 20 } 21 22 public static void main(String[] args){ 23 out o = new out(); 24 in a = o.test(); 25 //in a = new in();静态方法不能直接对非静态内部类进行引用 静态成员不能访问非静态成员,but可以通过外部类引用对其进行操作out.in in = new out().new in();
26 }
27 }静态内部类
- 静态内部类可以包含非静态成员
- 不能访问非静态成员
-
public class StaticInClass { int t = 1; static class inClass{ static int i = 1; public inClass(){ } public void tets(){ System.out.println("这是一个静态内部类的普通方法"); //静态内部类不能直接访问内部类的非静态属性 System.out.println(new StaticInClass().t); } } public static void main(String[] args){ //静态方法可以直接访问静态内部类 inClass c = new inClass(); c.tets(); } }
- 局部内部类:
- 定义:内部类为与方法内部
- 居于内部类只作用与方法内部,so,没有static修饰词
- 匿名内部类(java8)
- 匿名内部类必须继承一个父类或者实现一个接口
- 匿名内部类不能是抽象类
- 不能创建构造方法
-
interface in{ void test(String s); } public class AnInClass { public void syso(in i,String s){ i.test(s); } public static void main(String[] args){ String a = "hell world"; new AnInClass().syso(new in() { @Override public void test(String s) { System.out.println(s); } },a); } }
白茶清欢无别事,我在等风也等你。

浙公网安备 33010602011771号