final修饰的类的方法不能被重写,例如如果父类不希望子类重写某个方法,则可以使用final修饰符修饰该方法
在java的Object类里面有一个final方法:getClass(),因为Java不希望任何类重写这个方法,所有使用final方法封装起来,但对于该类提供的toString()和equals()方法,都允许子类重写,因此都没有用final修饰
代码示例:
package com.j1803.finalTest;
public class FinalMethodTest1 extends Test{
//编译错误
public void show(){};
public static void main(String[] args) {
}
}
class Test{
public final void show(){};
}
子类试图重写父类的final方法,编译错误
对于一个private修饰的父类方法,因为其仅在当前类中可见,其子类无法访问该方法,所以子类无法重写该方法,如果在子类中定义了一个与父类private方法有相同方法名,参数列表相同,返回值相同的方法,
也不是重写,只是定义了一个新方法,因此,即使使用final修饰一个private访问权限的方法,依然可以在其子类中定义与该方法具有相同方法名,相同参数列表,相同返回值类型的方法
package com.j1803.finalTest;
public class FinalMethodTest1 extends Test{
//编译错误
public void show(){};
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
class Test{
//修改public 为private
private final void show(){};
}
final修饰的方法仅仅是不能被重写,并不是不能被重载
package com.j1803.finalTest;
public class FinalMethodTest1{
public final void show(){};
public final void show(Object obj){};
public static void main(String[] args) {
}
}