一、什么是内部类? or内部类概念
内部类是为另一个类定义的类。 下面的TestB类是TestA类的内部类。 也就是说,内部类对象引用了将该内部对象实例化的外围类对象。
公共类testa { class testb { }二、为什么需要内部类? or内部类有什么作用?
1、内部类方法为包括私有数据。
2、内部类可以对同一包中的其他类隐藏。
3、如果您想定义回调函数,但不想编写大量代码,可以使用匿名内部类。
三.内部类别分类
成员内部类、本地内部类、匿名内部类、静态内部类
3.1成员内部类
成员内部类:位于类内部且与全局属性或方法相同类的内部类是成员内部类。
举个成员内部类的例子。
public class person { public void run { } { } publicclassdoworkimplementswork { }成员内部类的特征:
1、(重要)成员内部类可以无条件访问外部类的所有成员属性和成员方法) )包括静态成员和私有成员。 非常重要
2、如果成员内部类和外部类的属性和方法名称相同,则隐藏外部类的属性和方法; 但是,可以通过外部类. this .成员变量访问外部类的属性和方法。
3、外部类必须通过成员内部类的对象访问内部类的属性和方法。
4、成员内部的类对象隐式引用外部的类对象。 (可以说明第一点)
5、成员内部类可以具有publicprivateprotected和默认访问权限。
3.2局部内部类
举个本地内部类的例子。
公共class person { public void run (} { classdoworkimplementswork { } } http://www.Sina.com /
本地类:在方法或作用域中定义的类。 与成员内部类的区别在于,只能在方法内或作用域内访问本地内部类。
本地类特征:
1,http://www.Sina.com /
2、只能用定义局部内部类的方法或作用域实例化
3、本地内部类的对象不能使用该内部类所在方法或作用域的非final局部变量();
3.3匿名内部类
举个匿名内部类的例子:
公共类人员{ publicdoworkdosomething (} { return new dowork ) { public void do; }什么是匿名内部类:不定义类的名称,而是直接在使用位置定义对象。
匿名内部类特征:
1、唯一没有构造函数的类匿名内部类在编译时编译器会自动xxx$1.class;
2、匿名内部类中不能存在静态变量、方法等;
3、匿名内部类是局部内部类的特例;
4、大多数匿名内部类用于接口返回;
3.4静态内部类
举一个静态内部类的例子。
public class person { public void run } { } publicstaticclassdoworkimplementswork { } http://www.Sina.com /
静态内部类:将静态关键字添加到成员内部类时,它是静态内部类。
静态内部类的特点:
1、不需要依赖外部班级。
2、不能使用外部类的非静态属性和方法。
例题:
以下说法正确的是(AB )?
a、对于局部内部类,只有方法的局部变量标记为final或局部变量为effctively final时,内部类才可用
b、成员内部类位于外部类内部,可以直接调用外部类的所有方法(静态方法和非静态方法)
c .匿名内部类只能在方法内部使用,因此匿名内部类的用法与本地内部类一致
d、静态内部类可以直接访问外部类的非静态成员