final 修饰符,用来修饰类、方法和变量,final 修饰的类不能够被继承,修饰的方法不能被继承类重新定义,修饰的变量为常量,是不可修改的。
final修饰变量:
final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值。被 final 修饰的实例变量必须显式指定初始值。
final 修饰符通常和 static 修饰符一起使用来创建类常量。
//实例public class Test{
final int value = 10;
// 下面是声明常量的实例
public static final int BOXWIDTH = 6;
static final String TITLE = "Manager";
public void changeValue(){
value = 12; //将输出一个错误
}
}
final修饰方法:
类中的 final 方法可以被子类继承,但是不能被子类修改。
声明 final 方法的主要目的是防止该方法的内容被修改。
如下所示,使用 final 修饰符声明方法:
public class Test{public final void changeName(){
// 方法体
}
}
final修饰类:
final 类不能被继承,没有类能够继承 final 类的任何特性。
//实例public final class Test {
// 类体
}
注意:
当final修饰类时,当前类不能被继承;
当final修饰方法时,该方法不能被重写;
当final修饰变量时,变量的值不能被修改,即为常量;
abstract修饰符,用来创建抽象类和抽象方法。
抽象类:
抽象类不能用来实例化对象,声明抽象类的唯一目的是为了将来对该类进行扩充。
一个类不能同时被 abstract 和 final 修饰。如果一个类包含抽象方法,那么该类一定要声明为抽象类,否则将出现编译错误。
抽象类可以包含抽象方法和非抽象方法。
规则:
含有抽象方法的类,一定是抽象类;
抽象类中可以声明成员变量、常量、成员方法、抽象方法,抽象类中不一定要有抽象方法;
抽象类不能被实例化;
抽象类可以被继承;
可以通过两种方式获得抽象类对象:父类引用指向子类对象、匿名内部类;
子类必须重写抽象父类的所有抽象方法,或者是把子类也定义为抽象类;
如果一个类继承的抽象父类还有上级抽象父类,那么子类中需要要重写所有抽象父类的所有抽象方法;
抽象类也可以继承非抽象类,同时继承了父类的所有非私有的属性和方法;
实例:
abstract class Caravan{private double price;
private String model;
private String year;
public abstract void goFast(); //抽象方法
public abstract void changeColor();
}
抽象方法
抽象方法是一种没有任何实现的方法,该方法的的具体实现由子类提供。
抽象方法不能被声明成 final 和 static。
任何继承抽象类的子类必须实现父类的所有抽象方法,除非该子类也是抽象类。
如果一个类包含若干个抽象方法,那么该类必须声明为抽象类。抽象类可以不包含抽象方法。
*抽象方法的声明以分号结尾,例如:public abstract sample();
实例:
public abstract class SuperClass{abstract void m(); //抽象方法
}
class SubClass extends SuperClass{
//实现抽象方法
void m(){
.........
}
}
synchronized 和 volatile 修饰符,主要用于线程的编程。
synchronized 修饰符