1、常用类(内部类、匿名类、抽象类)
对于局部类、方法、变量,只针对特定区域有效,访问权限无效。
外部类的修饰符可以为 public 和 默认缺省修饰符(default)。因为外部类在包中,只有包可见和包不可见。
外部类中的内部类可以看做是外部类的成员变量。
内部类:(常规内部类、静态内部类、局部内部类、匿名内部类)
常规内部类:没有用static修饰且定义在外部类类体中,可直接访问外部类成员变量、方法。
静态内部类:与静态内部方法相似,只能访问外部类的static成员,可通过对象引用访问外部类的成员变量。(实例变量、方法)
局部内部类:存在于方法体或语句块中(包括方法、局部块、静态初始化块)不能加任何修饰符,只对局部有作用。
匿名内部类:定义一个类的同时创建一个没有名字的类称为匿名内部类,只用一次。
静态内部类才可以定义static方法,
内部类权限修饰符可以为public、protected(异包子类)、默认(同包)、private(同类有效),所以说一个java文件可以有多个public修饰的类。
为什么使用内部类?
每个内部类都能独立的继承一个抽象类实现,无论是外部类是否已继承。最大的优点就是它能够非常好的解决多重继承的问题。
1)内部类可以有多个实例,且每个实例有自己的状态信息,相互独立。
2)在单个外部类中,可以让多个内部类以不同方式来实现同一个接口,或者继承同一个类。另一种形式的多态。
3)创建内部类实例对象不依赖外部类。
4)内部类没有令人迷惑的” is--a ”关系,它就是一个独立的实体。
5)内部类提供了更好的封装,除了外部类,其他类不可访问。
匿名类:
匿名内部类:用在任何允许存在表达式的地方,只能用一次。
局部内部类:用在任何允许出现局部变量的地方,可以在自己的定义域中多次使用。
抽象类:一般使用abstract修饰
abstract不可与final、static、private共存,因为需要被继承,重写方法。
抽象方法中不能有方法体,抽象类中可以没有抽象方法,可以有普通方法。
抽象类有构造方法,可以给成员变量初始化,但不可实例化。
抽象类可以实现接口,也可以继承自抽象类。
抽象类可以定义普通成员变量而接口不可以,但是两者都可以定义静态成员变量。
一个类继承抽象类,必须重写所有的抽象方法,除非这个类本身也是一个抽象类。