活动地址:CSDN21天学习挑战赛
一、内部类与外部类
类A在类B,则称B为A的外部类,A为内部类
内部类就是把原本的类与类间的独立关系,拓展为包含关系。内部类已经失去了其独立性,所以被调用时,必须加上他的(所有)外部类或者内部类的对象的
注:类的内部五大结构:属性、方法、代码块、内部类、构造器
二、分类:
匿名内部类,局部内部类
成员内部类,静态内部类
- public class AAA {
- private int n1 = 10;
-
- public void test() {
- C c = new C();
- c.hello();
- }
-
- class C {//C是一个内部类
- public void hello() {
- System.out.println("C hello...");
- }
-
- class D {//可以在C这个类,继续定义内部类..333
-
- }
- }
- }
三、内部类分类
共性:
1)、可以直接访问外部类的所有成员,如果重名,则需要:
外部类名。this。外部类属性
2)、作用域是同它对应的成分:匿名内部类和局部内部类都是在方法中;成员内部类和静态内部类都是在类中(对象中)
1、成员内部类(最普通的内部类):相当于一个属性,可以添加修饰符。
2、局部内部类:有类名的定义在方法中的内部类,相当于一个局部变量。普通内部类对象依赖外部类对象而存在。
1)、局部内部类可以访问外部的所有变量。
2)、不能添加访问修饰符(public之类的,因此只能在被定义的方法或代码块中使用)
3)、内部类只能被他的外部类访问和创建对象
4.)、 外部类在方法中,可以创建内部类对象,然后调用方法即可
3、匿名内部类
匿名内部类:本质是内部类,没有名字(不是人定义的)是类也是一个对象(一次性类)。创建类的同时创建了一个对象。(减轻了给类取名的负担、简化了开发)
注:我们的开发过程简化了,但虚拟机的编译运行过程并没有被简化,在虚拟机的底层有一个与当前对象对应的类的存在。
- IA tiger = hew IA(){
- //定义了一个匿名内部类的对象tiger,该类实现了IA接口(或是继承了IA类)
- @Override
- public void cry(){
- System.out.println("老虎叫唤.….");
- }
- };//语句的结束
1)、匿名内部类既是类,也是对象:所以既有创建对象的特点,又有创建类的特点
2)、匿名内部类没有构造器,也不能重写构造器,(他的构造器调用的是父类或者接口的构造器。)
3、方法的调用,方法的调用通过对象进行,匿名类也是对象
4、静态内部类,同静态属性