首先我们先看下final在java中的作用
final在Java中可以用来修饰类、修饰方法和修饰变量
1. final修饰的类,为最终类,该类不能被继承。如String 类
2. final修饰的方法可以被继承和重载,但不能被重写
3. final修饰的变量不能被修改,是个常量
举例说明:
public class Person {
private String name;
private int age;
private String sex;
final public void work(){ //final 修饰的最终方法 可以被子类继承,但不能被重写
System.out.println("a person can do work");
}
final public void work(int age){ //重载一个final类
System.out.println("a person can do another work");
}
public void eat(){ //普通方法 可以被子类继承、重写
System.out.println("a person need to eat");
}
public static void sleep(){ //静态方法 可以被继承
System.out.println("a person need to sleep");
}
}
子类继承了父类Person 重写了父类普通方法eat() ,但不能重写父类final修饰的方法和静态方法
public class Man extends Person{
public void eat(){
System.out.println("the man also need do eat");
}
public static void sleep(){
System.out.println("the man also need to sleep");
}
}
注意:
在Java中静态方法可以被继承,但是不能被覆盖,即不能重写。
如果子类中也含有一个返回类型、方法名、参数列表均与之相同的静态方法,那么该子类实际上只是将父类中的该同名方法进行了隐藏,而非重写。(比如子类Man 中的sleep方法)