java中内部类特点_浅谈Java内部类

如果文章对你有所帮助,请点喜欢并关注,这将是我最大的动力,谢谢

为什么要有内部类

1.内部类是为了更好的封装,把内部类封装在外部类里,不允许同包其他类访问

2.内部类中的属性和方法即使是外部类也不能直接访问

3.相反内部类可以直接访问外部类的属性和方法,即使private

4.利于回调函数的编写。 PS:回调函数是函数的迭代

5.当描述事物,如身体里的大脑时,大脑在身体内部,可以通过内部类直观描述

内部类特点

1.内部类对象不仅指向该内部类,还指向实例化该内部类的外部类对象的内存。

5c5fa1377c79

zz.png

2.内部类和普通类一样可以重写Object类的方法,如toString方法;并且有构造函数,执行顺序依旧是先初始化属性,再执行构造函数

3.在编译完之后,会出现(外部类.class)和(外部类﹩内部类.class)两个类文件名。

4.内部类可以被修饰为private,只能被外部类所访问。事实上一般也都是如此书写。

5.内部类可以被写在外部类的任意位置,如成员位置,方法内。

内部类对象的建立

1在同包其他类 以及main方法中(前提要内部类没有被修饰成private,所以一般不采用)

1)先创建外部类对象,再通过外部类对象创建内部类

Out outer = new Out();

Out.In inner = outer.new In(); //第一个Out是为了说明该内部类到底属于哪个外部类

2)通过匿名外部类创建内部类

Out.In inner = new Out().new In();

2在外部类里

可直接创建对象,如 In inner = new In(); 或者直接new In();

内部类的访问

1.静态时,静态内部类只能访问外部类静态成员;非静态内部类都可以直接访问。(原因是:内部类有一个外部类名.this的指引)当访问外部类静态成员出现重名时,通过(外部类名.静态成员变量名)访问。如,Out.show();

2.重名情况下,非静态时,内部类访问自己内部类通过this.变量名。访问外部类通过(外部类名.this.变量名)访问 。如Out.this.show();

3.在没有重名的情况下,无论静态非静态,内部类直接通过变量名访问外部成员变量。

外部类的访问

1.内部类为非静态时,外部类访问内部类,必须建立内部类对象。建立对象方法,如前所述。

2.1 内部类为静态时,** 外部类访问非静态成员,通过(外部类对象名.内部类名.方法名)访问,如new Out().In.function();

2.2 内部类为静态时,外部类访问静态成员时,直接通过(外部类名.内部类名.方法名)**

,如 Out.In.funchtion();

PS:当内部类中定义了静态成员时,内部类必须是静态的;当外部静态方法访问内部类时,内部类也必须是静态的才能访问。

内部类分类

1成员内部类

也是最常规的内部类。该内部类相当于位于外部类的成员的位置。该内部类可以访问外部类的所有成员和方法,即使是private.

2静态内部类

1)该类被修饰为static。同时作为静态内部类,他不能访问外部类非静态的成员或方法。

2)访问方式如上所述。

3)一般书写静态类时,不涉及成员变量。

3方法内部类

类被创建在外部类方法中

1)可以访问外部类中的成员

2)不能被static private 修饰,因为他不再是成员位置,只有成员才能被修饰为static...

3)因此内部类不能有静态成员

4)内部类要访问外部方法中的局部变量时,该局部变量需要被修饰成final。

4匿名内部类

1)就是一个内部类的简化版

2)定义匿名内部类的前提是,该类必须继承一个外部类或者实现接口。

具体实现如下图

这是一个继承类的正常版,一共分为这几步

5c5fa1377c79

1.png

通过匿名内部类将一步到位实现该操作

5c5fa1377c79

2.png

PS:因为内部类是匿名的,也就是没有名字,所以该类一次只能调用一个方法,通常在写程序时也是如此,这也正是他优点,在只写一个内部类调用方法时,他可以使整个代码看上去很简洁。

2015.8.26更新

匿名内部类在Swing的消息机制中广泛使用,具体看例子

5c5fa1377c79

Swing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值