java类中可以包括:成员变量、方法、构造器、初始块、内部类
类成员:(类变量、类方法、静态初始块、静态内部类)。类成员既是有static关键字修饰的成分。
对于static关键字而言,有一条非常的重要的规则:类成员不能访问实例成员。因为类成员是属于类的,类成员的作用域比实例成员的作用域要大,完全可以出现类成员已将初始化完成,但是实例成员还不曾初始化的情况。
final修饰符:
1: final修饰成员变量和局部变量
final修饰变量时,表示该变量一旦获得了初始值就不可被修改。既可以修饰成员变量,也可以修饰局部变量、形参。
final修饰成员变量时必须由程序员显式的指定初始值。(final成员变量在显式初始化之前不能直接访问,但可以通过方法直接访问)
可执行宏替换的final变量:对于一个final变量来说,不管他是类变量、实例变量还是局部变量,只要该变量满足以下三个条件,这个final变量就不再是一个变量,而是一个直接量。
- 使用final修饰符修饰
- 在定义该final变量时指定了初始值
- 该初始值可以在编译时就被确定下来
2: final方法
final方法不可以被重写;当private final连用的时候,父类里面的方法,在子类中可以重新定义,不是重写。因为private关键字修饰的方法在子类中是没有办法被访问的。
3:final类
final类不可以有子类
抽象类
抽象方法和抽象类
- 抽象方法和抽象类必须有abstract修饰符来修饰,抽象方法不能有方法体
- 抽象类不能被实例化,无法使用new关键字来调用构造器创建实例
- 抽象类可以包括成员变量、方法、构造器、初始化块和内部类。抽象类的构造器不能用于创建实例,主要用于被其子类调用。
- 含有抽象方法的类只能被定义成抽象类。
abstract修饰的类表明这个类只能被继承,final修饰的类不能被继承,因此这两个关键字是不能同时出现的。
static和abstract不能同时修饰同一个方法,static类方法,类可以直接调用,但是abstract修饰的方法没有方法体。
抽象类的作用
抽象类可以作为父类的模板,从而避免了子类设计的随意性
接口
接口的定义是一种规范,因此接口里不能包含构造器和初始化块。接口里可以包含成员变量(只能是静态变量)、方法(只能是抽象实例方法、类方法、默认方法和私有方法)、内部类。
接口里的成员变量默认是public static final修饰的。
接口和抽象类的不同点:
- 接口里只能包含抽象方法、静态方法、默认方法和私有方法,不能为普通方法提供方法实现,抽象类则完全可以包含普通方法。
- 接口只能定义静态常量,不能定义普通成员变量。抽象类里既可以定义普通成员变量也可以定义静态常量。
- 接口里不包括构造器;抽象类里有构造器,但是此构造器不是为了创建对象,而是让其子类调用这些构造来完成属于抽象类的初始化操作。
- 接口里不能包含初始化块 ;但抽象类可以包含初始化块。
- 一个类最多只能有一个直接父类,包括抽象类。但是一个类可以直接实现多个接口 。