2014-03-27 94 views
-1

我很困惑在我的計劃結束時。我正在開發一個銀行賬戶的Java程序,並將抽象類和子類集成在一起。如何實例化抽象類的子類?

public abstract class Account { 
    public static void main(String args[]) { 
     CheckingAccount Account1 = new CheckingAccount(); 
    } 
    public Account() { 
     // 
    } 
    public class CheckingAccount extends Account { 
     // 
    } 
} 

我已經試過外面的CheckingAccount類,並從類帶走public然而,然後我得到它找不到主的帳戶類的錯誤消息。

如果我將static添加到CheckingAccount類中,則會出現上述同樣的錯誤。

+2

但是你沒有說當前的代碼是什麼問題? –

回答

3

您不能從靜態方法(main)實例化實例類(CheckingAccount)。你必須讓內部類static

public abstract class Account { 
    public static void main(String args[]) { 
     CheckingAccount Account1 = new CheckingAccount(); 
    } 
    public Account() { 
     // 
    } 
    public static class CheckingAccount extends Account { 
     // 
    } 
} 

順便說一句,這是一個很奇怪的設計。我會避免:

  • 與你的類混合的主要方法,只是做一個新的分離賬戶類,而不是
  • 聲明一個內部類作爲擴展容器類,使用兩個類(在兩個不同的類)代替。
0

在一個java類文件中不能有兩個公共類。而且,Java文件應該用其中的公共類命名。

1

內部類的問題是 - 你應該只在你確實知道你需要它的時候使用它。否則你會面臨這樣的問題。

那麼這有什麼問題?基本上,內部類實例總是包圍封閉類的一個實例。所以要訪問它們,你需要一個封閉類的實例。但是,您試圖從static方法實例化CheckingAccount類。並且因爲static方法沒有對this實例的引用,所以這種實例化方式是非法的。如果您更改實例化這個

問題可能會去:

public static void main(String args[]) { 
    CheckingAccount Account1 = new Account().new CheckingAccount(); 
} 

但是,這將不能工作,因爲Account類是abstract。所以,你應該在這裏做兩個即時更改:

  1. main()方法移到Account類之外。理想情況下,您的域類中不應該有main()方法。爲此創建一個單獨的類。
  2. 移動CheckingAccount類以外Account類。這對你更容易。