2016-11-03 10 views
1

私はというサブクラスをシリアル化する必要がある大学の課題を持っています。現在です。新しいCurrentアカウントの詳細を入力してシリアル化できるようにする必要があります。別のクラスのインスタンス変数でユーザー入力を受け入れる方法を教えてください。

アカウントクラスがスーパークラスであるクラス階層があります。 現在のオブジェクトを追加、表示、一覧表示、編集、削除することは可能です。静的変数を介して行われるように、ユーザーにアカウント番号を追加するように求めることはできません。例:**accountNo** = **nextAvailableNumber++**;

私はユーザー名とdateOpened詳細を取り上げなければなりません。すでにNameクラスを作成していますが、Nameクラスにはnameという名前の変数がありますので、サブクラスのStringとして使用できません。それは私に不一致例外を与えている、名前と不一致の例外に文字列を変換することはできませんの日付をintに変換することはできません

私の質問は次のとおりです。私はユーザーの入力を取らなければならない場合。私は入力を取るためにNameクラスの型名の変数nameを使用する必要があります。Date**dateOpened**変数で同じことをしていますか?私はキャスティングする必要があります。ここに私のコードは、ユーザーがアカウントを設定することができますメニューベースのシステムです。タイプName & & Date Date型の変数**dateOpened**の名前の変数を持つ

// Nameクラス。

package ie.lyit.bank; 

public abstract class Account 
{ 
    protected Name name;  // COMPOSITION - Account HAS-A name (object of class Name) 
    protected String address; 
    protected double balance; 
    protected Date dateOpened; // COMPOSITION - Account HAS-A dateOpened (object of class Date) 
    protected int accountNo; 

    private static int nextUniqueNumber = 1; // Next available unique Account number 

    // Default Constructor - set Instance Variables to null 
    public Account() 
    { 
     name = new Name();  
     address= new String(); // OR address = ""; OR address = null; 
     balance = 0.0;  
     dateOpened = new Date(); 
     // Set accountNo to static nextUniqueNumber & increment it for next accountNo 
     accountNo = nextUniqueNumber++; 
    } 

    // Current class with read() method 
    // Read method to read in the account details from the user 

    public void read() 
    { 
     Scanner keyboardIn = new Scanner(System.in);   
     System.out.println("ENTER ACCOUNT DETAILS ==>"); 
     System.out.print("ACCOUNT NAME : "); 
     name = keyboardIn.nextLine(); 
     System.out.print("ACCOUNT ADDRESS : "); 
     address = keyboardIn.nextLine(); 
     System.out.print("ACCOUNT BALANCE : "); 
     balance = keyboardIn.nextDouble(); 
     System.out.print("ACCOUNT DATE OPENED : "); 
     dateOpened = keyboardIn.nextInt(); 
    } 
} 
+0

'Name'クラスの目的は何ですか?それは 'name'属性以外のものを含んでいますか? – Berger

+0

名前クラスの目的は、単に名前をモデル化することです。 – Daniel

答えて

0

名前型を使用する必要はありません。単純にString型として宣言し、クラス変数としてアクセスできます。

あなたが派生クラスを持っているなら、スーパークラスの名前変数にアクセスする必要があるxyzがアカウントと言う。

Account.Nameのように、次のように定義したという意味でアクセスできます。

class Account 
{ 
protected String Name; 

} 

class xyz extends Account 
{ 
// here u can access using Account.Name; 
} 
+0

だから私はそれを使用する必要はありません。 nameとdateOpenedという名前の新しい変数を宣言するだけですか? DateクラスはAccountから継承しないので、OKであるはずです。 Dateクラスと同じです。 Currentで2つの新しい変数を宣言して、dateOpenedとnameという名前を付けます。 – Daniel

+0

日付クラスが継承されていない場合、dateopenedはDateクラスで宣言することができます。 –

関連する問題