當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Java Final和Abstract的區別用法及代碼示例


本文討論抽象類和最終類的區別。在討論差異之前,讓我們首先了解它們各自的含義。

最終類:使用“Final”關鍵字聲明的類稱為最終類。 Final關鍵字用於最終確定該類中使用的類、方法和變量的實現。使用最終類的主要目的是防止該類被繼承(即,如果一個類被標記為最終類,則任何其他類都不能從該最終類繼承任何屬性或方法。如果最終類被擴展,Java 會給出編譯時錯誤。以下是如何聲明最終類的示例。但是,由於要繼承此最終類,因此會出現編譯時錯誤。

Java


// Java program to demonstrate the
// Final class
final class Super {
    private int data = 100;
}
public class Sub extends Super {
    public static void main(String args[])
    {
    }
}

抽象類:使用 “abstract” 關鍵字聲明的類稱為抽象類。抽象類背後的主要思想是實現以下概念抽象。抽象類可以同時具有抽象方法(沒有主體的方法)和具體方法(有主體的常規方法)。但是,普通類(非抽象類)不能有抽象方法。以下是如何聲明抽象類的示例。

Java


// Java program to demonstrate
// an abstract class
// Abstract parent class
abstract class Book {
    // Abstract method without body
    public abstract void page();
}
// shayar class extends Book class
public class shayar extends Book {
    // Declaring the abstract method
    public void page()
    {
        System.out.println("Geek");
    }
    // Driver code
    public static void main(String args[])
    {
        Book obj = new shayar();
        obj.page();
    }
}

上麵的程序給出“Geek”作為輸出。所有抽象方法都應該在子類中重寫以提供實現。然而,從定義來看,final 方法不能被重寫。因此,抽象的最終組合對於方法來說是非法的。而且,對於抽象類,我們需要創建一個子類來提供實現,而對於最終類,我們不能創建子類。因此,最終的抽象組合對於類來說是非法的。因此,最終類不能包含抽象方法,而抽象類可以包含最終方法。下麵是一個示例,演示了抽象類和最終類的組合。

Java


final class A {
    public abstract void methodOne();
}

顯然,這個實現是無效的,因為最終類不能有抽象方法。作為final類不能被繼承。

Java


abstract class A {
    public final void methodOne() {}
}

但是,抽象類可以有最終方法。這個最終方法被視為具有無法重寫的主體的普通方法。

下表展示了抽象類和最終類之間的區別:

編號 抽象類 最後一堂課
1. 使用“abstract”關鍵字。 使用“final”關鍵字。
2. 這有助於實現抽象。 這有助於限製其他類訪問其屬性和方法。
3. 為了以後使用,應該重寫所有抽象方法 由於最終類不能被繼承,因此不會出現重寫概念
4. 有的方法可以實現,有的不能實現 所有方法都應該有實現
5. 無法創建不可變對象(事實上,無法創建任何對象) 可以創建不可變對象(例如 String 類)
6. 抽象類方法的函數可以在子類中更改 Final 類方法應該像其他類一樣使用
7. 可以繼承 不可繼承
8. 無法實例化 可以實例化
9. 抽象類可能有最終方法。 Final類沒有抽象方法或final方法。
10. 抽象類有助於實現抽象。 Final 類可以幫助限製其他類訪問屬性和方法。


相關用法


注:本文由純淨天空篩選整理自gauravmoney26大神的英文原創作品 Difference between Final and Abstract in Java。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。