2013-10-24 91 views
0

H,初學者在這裏。我有一個叫做'Command'的抽象類,它有幾個子類來擴展它,所有這些都是命令,並且使用'Command'中的變量和一些方法。在一個單獨的類中(不擴展Command),只要用戶這樣做,就會有一些代碼調用這幾個類。 Command類有一些變量,我想從單獨的類中讀取(使用getter方法)。在不擴展的類中使用抽象類方法

public abstract class Command { 

    private String variableName; 

    public String getCurrentVariableName() { 
     return variableName; 
    } 
} 



public class SeperateClass { 

// rest of code 

System.out.println(command.getCurrentVariableName()); 

} 

創建該類的對象不起作用,因爲我無法實例化抽象類。我猜我可以實例化一個子類並使用super返回它,但除非沒有其他方法,否則我不想。

請幫

感謝

回答

6

你試圖調用一個實例方法以靜態方式,由於該方法也不是一成不變的,這是不行的。你必須

  • 創建一個Command對象的具體實例 - 從延伸到命令非抽象類創建。
  • 在該實例上調用方法,而不是以靜態方式。

public class SeperateClass { 

    // rest of code 
    public void someMethod() { 
    Command myCommand = new ConcreteCommand(); 
    System.out.println(myCommand.getCurrentVariableName()); 
    } 
} 

只是好奇,但爲什麼是抽象的命令,開始用?


編輯
幽州在下面留言:

你能提供一個鏈接,這將幫助我做到這一點?

你需要給我們更多的背景到您的問題,我認爲,但對於一般的評論,你可以在這裏瞭解更多關於抽象類:Abstract Methods and Classes Tutorial


編輯在2
幽州評論:

如果我刪除了摘要,錯誤表示Command類不是抽象的

您可能正在以錯誤的方式解決錯誤。通常,解決這種類型錯誤的最佳解決方案是解決編譯器抱怨的問題,而不是使該類變得抽象。例如,這個錯誤常常被聲明爲實現一個接口的類中看到,如果你忽略了給接口聲明的所有方法,編譯器會給你這個錯誤信息。在這種情況下,你不應該讓課堂抽象化,而應該給它必要的方法。

你會想告訴我們更多關於這個錯誤的細節。

+0

在這裏說! +1 –

+0

謝謝,我會試試這個。我會看看我是否可以刪除摘要 – user2891805

+0

@ user2891805:請參閱編輯以回答。 –