1、在Java中,abstract、static和final都是关键字,用作修饰符
2、abstract:可以用来修饰类和方法,不能用于修饰变量。
(1)当一个方法被abstract修饰后就变成抽象方法,该方法所在的类也必须变成由abstract修饰的抽象类。
(2)一旦一个类变成了抽象类,那么这个类就具有继承关系。继承抽象父类的子类必须重写父类中的所有的抽象方法或子类也变成抽象类(可以不用重写父类的抽象方法)。
(3)抽象方法没有方法体----即抽象方法只有方法的声明,没有方法的具体实现。
(4)抽象类不可以实例化(即创建直接对象),只能通过子类继承抽象类且重写了父类的所有抽象方法后,该子类才能被实例化(即创建多态对象)。
(5)抽象类中可以全部都是抽象方法,也可以是非抽象方法。
(6)抽象类中可以有构造方法,主要是为了子类创建对象时使用super()方法。
(7)抽象类可以定义变量,也可以定义常量。
(8)abstract关键字不可以与final、private、static关键字共存。因为被final修饰的方法不可以被重写,因为被abstract修饰后的抽象方法必须被子类重写。被private修饰的方法,是私有化的表现,不能被子类访问,所以abstract不能与private共存。被static修饰的方法是静态的,静态方法随着类的加载而加载,不需要通过子类去实现,也就不具备继承的关系。
3、static:可以用来修饰成员变量和成员方法(即成员函数),一般写在修饰符的后面
(1)被static修饰的成员变量可以通过对象调用,也可以直接被类名调用。通过类名调用的静态资源,也叫做类资源,为本类对象所共有。
(2)被static修饰的资源,随着类的加载而加载,而且只加载一次,会一直存在本类中,直到本类消失便会随之消失。
(3)被static修饰的静态资源只能访问本类中的静态资源,不能访问非静态资源。因为静态资源在加载时,优先于对象存在,所以不能访问对象中的成员。而非静态资源既可以访问非静态资源,也可以访问静态资源
(4)静态方法中不能使用this和super关键字。因为this代表的是本类中的对象,super代表的是父类中的对象,静态方法在加载时会优先于对象存在,所以不能使用this和super关键字。
4、final:可以用来修饰变量、方法、类
(1)变量被final修饰后就变成了常量,必须赋值,且赋值后不可更改!!!被final修饰的常量可以被static修饰,举例:static final int i = 12。
(2)被final修饰的方法不可以被子类重写(即子类不能对该方法进行功能扩展),但可以被子类继承,所以被final修饰的方法不能再被abstract修饰。如果在子类中有一个和父类一样的静态方法,那么该静态方法是子类特有的,两者并不构成重写关系。
(3)被final修饰的类是最终类,不可以被继承。且final类中的方法也都是被final修饰的方法。
(4)final不能用来修饰构造方法