inner class

inner class 乍看起来和普通的类区别不大。但是inner class 的典型用法是在其外部类里添加methods,用以返回指向内部类的reference。

If you want to make an object of the inner class anywhere except from within a non-static method of the outer class, you must specify the type of that object as OuterClassName.InnerClassName。


inner class 同样遵循qualifier访问规则。如果一个inner class说明为private,则在其所在类以外无法被访问。
注意:普通的类(即非inner class)不能是private或protected,只能是public或
package access。

一个inner class 可以在一个method内部定义,也可以在一个method的某个scope内部定义。其访问域和普通的member相同。

匿名(anonymous)inner class,可以实现某個interface。
匿名 inner class,可以继承(恶性tends)一個擁有non-default 建構式的class。
匿名 inner class,可以執行資料成員初始化動作。
匿名 inner class,可以通过“實體(instance)初始化”來執行建構動作。注意,匿名的inner classes 不得擁有建構式。

Argument must be final to use inside anonymous inner class。

inner class 可以访问外部类的所有成员,因为inner class拥有一个reference,指向外部类的一个对象,这个对象负责创建该inner class(的对象)。




嵌套类 -- static inner class

嵌套类意味着:
1. 要创建嵌套类的对象,并不需要其外围类的对象。
2. 不能从嵌套类的对象中访问非静态的外围类对象。
嵌套类与普通的内部类还有一个区别。普通内部类的属性与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static属性,也不能包含嵌套类。但是嵌套类可以包含所有这些东西。

正常情况下,你不能在接口内部放置任何代码,但嵌套类可以作为接口的一部分,因为它是static的。只是将嵌套类置于接口的命名空间内,这并不违反接口的规则。


要创建一个inner class 的对象,需要先创建其外部类的一个对象, 然后:
Parcel11.Contents c = p.new Contents();

因此,除非你已经有了外围类的一个对象,否则不可能生成内部类的对象。因为此内部类的对象会悄悄地链接到创建它的外围类的对象。如果你用的是嵌套类(静态的内部类),那就不需要对其外围类对象的引用。






























 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值