final 这个关键字可以修饰类、属性和方法,被 final 修饰的类是一个终结的类,不能被继承;被 final 修饰的属性就变为常量;被 final 修饰的方法不能被重写
1.修饰类
final class Father {
public String name;
public void show() {
System.out.println(name);
}
}
class Son extends Father {
}
由于 Father 类被 final 关键字修饰,所以其他类就不能再继承 Father 类了
被 final 修饰的类,不能有子类,也就是不能被继承
2.修饰属性
被 final 修饰的属性叫常量,通常会与 static 关键字一起使用,因为常量是不可改变的,既然不可改变,我们只需要在内存中只保留一份即可
class Father {
public static final String COUNTRY = "中国";
public String name;
public void show() {
System.out.println(name + "," + Father.COUNTRY);
}
}
定义常量的赋值方式:
1.在定义常量时赋值
class Father { public final String COUNTRY = "中国"; }
2.在构造方法中赋值
class Father { public final String COUNTRY; public Father() { COUNTRY = "中国"; } }
3.在静态代码块里赋值
class Father { public static final String COUNTRY; //静态代码块 static { COUNTRY = "中国"; } }
3.修饰方法
被 final 修饰的方法不能重写
4.重写
当父类和子类中有相同的方法时,就称为重写
class Father {
public String name;
public void show() {
System.out.println(name);
}
}
class Son extends Father {
public void show() {
System.out.println("Son 中的 show()。。。。");
}
}
public class FinalDemo1 {
public static void main(String[] args) {
Son son = new Son();
son.show();
}
}
在上面的代码中,父类 Father 和子类 Son 类中都有 show 方法,当我们调用 show 方法时,输出的是子类 Son 中的 show 方法 ,如果子类中没有 show 方法,则输出父类中的 show 方法
重写的特点:1.方法名称必须相同
2.方法的参数列表必须相同
3.子类方法的访问修饰符必须大于或等于父类方法的访问修饰符(private < protected < public)
4.子类方法的返回值类型要么是父类方法的返回值类型,要么是父类方法返回值类型的子类
5.父类方法如果没有抛出异常,子类方法一定不能抛出异常,如果父类方法抛出了异常,那么子类方法可以不抛出异常,也可以抛出父类异常或其子类
6.发生在子父类中