java内部类

内部类是一个编译时的概念,一旦编译成功,就会成为两个完全不同的类。对于外部类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,生不生成外部类对象都没关系)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值