嵌套类的学习
当static还有final还有内部类都搅和在一起就蒙了,所以学习之后分享一下自己的笔记。
看过一些大佬写的笔记,感觉还是挺有用的,在此分享一下:
static:
- static:加载类的时候,会给static分配一个地址,可以通过类名直接访问
- 非static 每创建一个实例就给他分配一次内存。
final:
- final可以修饰类,这样的类不能被继承。
- final可以修饰方法,可以继承,但是这样的方法不能被重写。
嵌套类有两种类型:静态的和非静态的,静态的嵌套类是应用了static修饰符的嵌套类,因为是静态的,所以只能通过对象访问包含类的非静态成员。也就是说,嵌套类不能直接引用包含类的非静态成员。因为这条限制,所以很少使用静态的嵌套类。
嵌套类最重要的类型是内部类,内部类是非静态的嵌套类,可以访问外部类的所有变量和方法,并且可以直接引用它们,引用方式与外部类的其他非静态成员使用的方式相同。
内部类可以访问外部类的所有成员,但是反过来不可以。内部类的成员只有在内部类的作用域内才是已知的,并且外部类不能使用。内部类中的属性和方法即使是外部类也不能直接访问,相反内部类可以直接访问外部类的属性和方法,即使private。这是因为在创建外部类时,内部类会自动捕获一个外部类的引用,所以内部类可以访问外部类元素。
匿名内部类:
- 匿名内部类是没有访问修饰符的。
- 匿名内部类必须继承一个抽象类或者实现一个接口
- 匿名内部类中不能存在任何静态成员或方法
- 匿名内部类是没有构造方法的,因为它没有类名。
静态内部类:
- 静态内部类的创建不需要依靠外部类,可以直接创建
- 静态内部类只能访问外部类的静态成员变量和方法,不能访问外部类的非静态成员变量和方法
- 非静态内部类中可以调用外部类的任何成员,不管是静态的还是非静态的