内部类的修饰符:public,protected,private,static
非静态内部类不能拥有静态成员
方法里也可以定义内部类,叫局部内部
大多数时候,内部类被当做成员内部类定义,而不是作为局部内部类定义,
成员内部类是五大类成员之一,类成员:成员变量,方法,构造器,初始化块,内部类
内部类分为:静态内部类,非静态内部类
外部类的上一级程序单元是包,只有两个作用域,同一个包内和任何位置,所以只需要两种访问控制权限,包访问权限和公开访问权限
当调用非静态内部类的实例方法,必须有一个非静态内部类实例,非静态内部类实例必须寄生在外部类实例里。
非静态内部类的成员可以访问外部类的私有成员,非静态内部类的成员只在非静态内部类范围内可知,并不能被外部类直接使用,如果外部类要访问非静态内部类的成员,则必须显式创建非静态内部类对象来调用访问其实例成员
接口里定义的内部类默认使用public static,也就是接口内部类只能是静态内部类
类的作用:定义变量,创建实例,作为父类被继承
内部类的作用:
1)在外部类内部使用内部类:
注意静态成员不能访问非静态成员,不要在外部类的静态成员使用非静态内部类(这也是一种类的成员)
2)在外部类以外使用非静态内部类:
如果要这样,不能使用private修饰符,这样的话只有其修饰的内部类在外部类中使用(定义变量,创建实例)
而使用public可以在任何地方使用,是公开的,但是使用内部类的时候就是要加上外部类的名字,才能走到内部类的地方
而省略用法,只有在一个包中的才能使用这个内部类
使用protected的后面再说
非静态内部类的子类不一定是内部类,可以是一个外部类
但是非静态内部类的子类实例一样需要保留一个引用,指向其父类所在外部类的对象
3)在外部类以外使用静态内部类,静态内部类是外部类相关的,因此创建静态内部类对象的时候不需要创建外部类对象。在外部类以外的地方创建静态内部类的语法:new 外部类的类名.内部类的名字加圆括号
//如果要定义内部类,优先考虑静态内部类,因为简单啊
//所有的局部成员不能使用访问控制修饰符
//匿名内部类适合创建那种只需要一次使用的类,创建匿名内部类的时候会立即创建一个该类的实例,然后这个类立即消失,匿名内部类不能重复使用,匿名内部类需要继承一个父类或者实现一个接口,必须且只能做一个
//匿名内部类不能是抽象类,因为系统在创建匿名内部类的时候,会立即创建匿名内部类的对象,因此不允许将匿名内部类定义成抽象类
//匿名内部类不能定义构造器,因为匿名内部类没有类名,所以无法定义构造器,但是可以定义初始化块,通过实例初始化块来完成构造器需要完成的事情
//常见的创建匿名内部类的方式是需要创建某个接口类型的对象
java编程基础随心笔记
于 2022-06-12 17:55:41 首次发布