簡體   English   中英

Java抽象類中的抽象方法

[英]Abstract Method In Abstract Class In java

Java可能嗎? 還是可以在定義它之前使用任何方法?

我在Abstract類中嘗試過,但是JVM說abstarct方法不能是靜態的。 然后我嘗試定義對象的類,但沒有使用“擴展”。 他們兩個都給我一個錯誤。

是的,您也可以使用抽象方法,但不能使用靜態方法。 靜態方法即使是抽象類的一部分,也必須具有主體,因為它不需要創建類的實例來訪問其靜態方法。

可以在對象上調用抽象方法,以使該對象存在,它本身必須實例化擴展該抽象類的類(從而實現了該方法)。

不能創建靜態抽象方法,因為當您嘗試調用該方法時,將沒有任何實現。 在類上調用靜態方法。

public abstract class AbstractClass {
    public static abstract void staticAbstract();
    public abstract void instanceAbstract();
}

以上面的例子為例; 我在那里定義了兩種方法。

要調用靜態方法,可以在AbstractClass, AbstractClass.staticAbstract();上調用它AbstractClass.staticAbstract(); 但是,AbstractClass對此方法沒有實現。 您的編譯器將如何處理該方法?

但是,要調用實例方法,您需要在對象上調用它。 由於無法實例化抽象類,因此要使Object存在,以便可以調用實例方法,則Object所屬的類必須已實現了該方法。

public class RealClass extends AbstractClass {
    public instanceAbstract();
}

RealClass類擴展了AbstractClass ,因此它必須實現instanceAbstract(); RealClass

AbstractClass class = new RealClass();
class.instanceAbstract();

您創建RealClass的實例,為進行演示,將其分配給類型AbstractClass的變量。 盡管AbstractClass.instanceAbstract();仍可以在Object上調用abstract方法AbstractClass.instanceAbstract(); 沒有實現的方法; RealClass提供了實現。

是的,可以在抽象類中定義抽象方法之前先調用它。 假設您已經設計了一個基本公式類:

public abstract class AbstractFormula {

    protected abstract void initialize();

    public double evaluate() {
        initialize();
        //
        // do the logic
        //
        return 0d; // the result
    }
}

還假定計算公式的邏輯是:

  1. 初始化系數
  2. 做數學計算結果

因此, evaluate()方法的默認實現是調用initialize()方法,然后進行計算。 換句話說,您可能不知道在AbstractFormula所有可能實現中初始化系數的邏輯,但是您可以在abstract類的其他方法中調用它。

但是首先不能創建靜態抽象方法。 因為靜態方法是類方法,並且可以在不創建該類對象的情況下進行調用。 因此,擁有靜態抽象方法毫無意義。 static方法在定義時應具有其主體。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM