Java基础对内部类的理解

对内部类的理解

内部类,就是在一个类的里面再定义一个类。
所有内部类都是类,普通类所具备的,它们同样具备,包括但不限制:语法,属性,行为,构造、初始化块,也能在内部再定义内部类,它们拥有独立的class文件,同样需要编译,同样也生成对象。

内部类又分为:成员内部类局部内部类

成员内部类

成员内部类和外部类的属性,方法一样,是属于外部类其中的成员。它在编译时,生成独立的class文件,文件名是:外部类类名$内部类类名
内部类中有个特殊存在,静态内部类

普通内部类:
1、它可以直接在外部类中任意非静态位置直接使用,生成对象、调用方法。

2、内部类的方法也可以操作外部类的属性,当变量重名进行区分时,这时候的this关键字指的是这个内部类的当前对象,而不是外部类;如果要想操作外部类的属性或方法,则需要用: 外部类类名.this.变量名

3、内部类的访问范围也受到访问修饰的影响,它也可以在访问修饰符对应的外部范围内使用。语法:外部类类名.内部类名 对象名 = 外部类.new 内部类类名();
4、它在编译时,也会生成独立的class文件,文件名是:外部类类名$内部类类名

静态内部类
定义语法:访问修饰符 static 返回类型 类名(){……}
它同样适用于static的两大共性:
1、内部的所有内容都与对象无关,只于类有关;
2、总是在加载期有特殊的操作。
它和普通成员类一样, 在所属外部类中的任意位置都可以直接使用, 生成对象、 调用方法

它也是在加载期时就被定义出来;也只能访问外部类的所有静态属性或者静态方法,而且不能用外部类类名.this这种方法,只能用外部类类名.的方式,至于为什么?请参照static的两大共性

它和普通内部类一样,也可以在访问修饰符对应的外部范围内饰内使用,但是语法却不同:
外部类类名.内部类名 对象名 = new 外部类类名.内部类类名();

局部内部类

它是定义在一个类的方法内部,它也只能用于这个方法内;它不能用访问修饰符,也不能用static
在编译时,也会生成独立的class文件,文件名是:外部文件名$序号加上局部内部类名
在局部内部类中也有个特殊的存在:匿名内部类

普通的局部内部类
1、只能定义在一个类的某个方法内部,也只能在这个方法中使用:产生对象,调用属性行为。
它对于所属的外部类的方法是没有访问限制的,就算有private也可以直接操作访问;
2、局部内部类可以访问操作到外部类的属性和行为,但是它访问外部类的方法中的局部变量时,只能访问而不能进行修改,
3、它不能在外部类之外包括所属方法之外使用。

匿名内部类
它是一个没有修饰符,没有类名,也是只能存在于方法内部的一个类,它也会生成class文件,文件名叫:外部类名$序号
它的语法:new 对象类型(){……语句块……}

它在new对象的同时在语句块中定义它的属性,行为;它只能使用一次,连名字都没有(用完就扔)
它和普通局部内部类一样,可以访问操作到外部类的属性和行为,但是它访问外部类的方法中的局部变量时,只能访问而不能进行修改。

以上就是对内部类的一些粗鄙之见…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值