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) {
}
}