java内部类

来源:互联网 发布:touch bar 知乎 编辑:程序博客网 时间:2024/05/22 17:38

内部类是一个编译时的概念,一旦编译成功,就会成为两个完全不同的类。对于外部类Outer和内部类Inner编译完成后出现outer.class和outer$inner.class两类。所有内部类的成员变量和方法可以和外部相同。

  1. 成员内部类
    成员内部类,就是作为外部类的成员,可以直接使用外部类的所有成员和方法,即使是private的。同时外部类要访问内部类的所有成员变量/方法,则需要通过内部类的对象来获取。
    要注意的是,成员内部类不能含有static的变量和方法。因为成员内部类需要先创建了外部类,才能创建它自己的
public class Outer {     public static void main(String[] args) {         Outer outer = new Outer(); //创建外部类        Outer.Inner inner = outer.new Inner(); //创建内部类        inner.print("Outer.new");         inner = outer.getInner();         inner.print("Outer.get");     }     // 推荐使用getxxx()来获取成员内部类,尤其是该内部类的构造函数无参数时     public Inner getInner() {         return new Inner();     }     public class Inner {         public void print(String str) {             System.out.println(str);         }     } } 

运行结果:

Outer.new
Outer.get

  • 局部内部类

局部内部类,是指内部类定义在方法和作用域内

  • 匿名内部类
  • 静态内部类
class Out {    private static int age = 12;    static class In {        public void print() {            System.out.println(age);        }    }}public class Demo {    public static void main(String[] args) {        Out.In in = new Out.In();        in.print();    }}

可以看到,如果用static 将内部内静态化,那么内部类就只能访问外部类的静态成员变量,具有局限性
其次,因为内部类被静态化,因此Out.In可以当做一个整体看,可以直接new 出内部类的对象(通过类名访问static,生不生成外部类对象都没关系)

阅读全文
0 0
原创粉丝点击