【Java笔记】内部类通俗理解

内部类

通俗的讲,为了更好的封装,将一些只在本类依赖使用的类用内部类的书写。带点逼格,其实是为了优雅的设计数据结构。

常规内部类

定义在类的内部,跟类变量同级,写法和常规类无区别。不加修饰符Public外部不能访问。不能定义为static。

匿名内部类

不需要类名,只使用一次,实现的是一个抽象方法或接口。推荐使用java8的lambda表达式来实现。

局部内部类

定义在方法或代码块中,生命周期也仅在改范围内,写法与常规无异。不加任何修饰符。

静态内部类

定义在类内部,使用static修饰,只能访问外部类的静态方法和变量。可以不依赖于外部类实例对象来声明,直接依赖外部类。

内部类和外部类之间

访问外部类成员变量

非静态,直接访问变量名。静态(静态内部类、或者非静态内部类的静态方法),先实例化外部类再访问。

class Inner1{  
        void Test1 (){  
            System.out.println(i);  
            System.out.println(string);  
        }  
    }  

static class Inner2{  
        void Test1 (){  
            System.out.println(new Outter().i);  
            System.out.println(string);  
        }  
    }  

外部访问内部成员变量

静态方法访问非静态内部类成员
new Outter().new Inner();

非静态方法访问非静态内部类成员
new Inner();
new Outter.Inner();

静态方法访问静态内部类的成员
先“外部类.内部类”访问至内部类。
Outter.Inner inner = new Outter.Inner();
inner.i;
Outter.Inner.string#静态内部类的静态成员可以直接访问

总的来说,因为将内部类理解为外部类的一个普通成员,所以外面的访问里面的需先new一个对象。

匿名内部类访问外部成员变量时,成员变量前应加final关键字。

注意

在内部类和外部类有同名变量情况下,默认是访问内部成员变量。可使用如下来进行访问:

外部类.this.成员变量
外部类.this.成员方法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值